作为笔记存储.
最近公司有这方面的使用需求。在网上查了一些资料后。得到了想要的结果。以下记录摘抄至网上资料
1.首先,服务端。项目NuGet直接引用Fleck类库。
code:
1 //客户端url以及其对应的Socket对象字典2 IDictionary<string, IWebSocketConnection> dic_Sockets = new Dictionary<string, IWebSocketConnection>();3 //创建4 //本地测试的配置IP和端口。自行设置5 WebSocketServer server = new WebSocketServer("ws://127.0.0.1:8002");6 //出错后进行重启7 server.RestartAfterListenError = true;8 9 //开始监听 10 server.Start(socket => 11 { 12 socket.OnOpen = () => //连接建立事件 13 { 14 //获取客户端网页的url 15 string clientUrl = socket.ConnectionInfo.ClientIpAddress + ":" + socket.ConnectionInfo.ClientPort; 16 dic_Sockets.Add(clientUrl, socket); 17 Console.WriteLine(DateTime.Now.ToString() + "|服务器:和客户端网页:" + clientUrl + " 建立WebSock连接!"); 18 }; 19 socket.OnClose = () => //连接关闭事件 20 { 21 string clientUrl = socket.ConnectionInfo.ClientIpAddress + ":" + socket.ConnectionInfo.ClientPort; 22 //如果存在这个客户端,那么对这个socket进行移除 23 if (dic_Sockets.ContainsKey(clientUrl)) 24 { 25 //注:Fleck中有释放 26 //关闭对象连接 27 //if (dic_Sockets[clientUrl] != null) 28 //{ 29 //dic_Sockets[clientUrl].Close(); 30 //} 31 dic_Sockets.Remove(clientUrl); 32 } 33 Console.WriteLine(DateTime.Now.ToString() + "|服务器:和客户端网页:" + clientUrl + " 断开WebSock连接!"); 34 }; 35 socket.OnMessage = message => //接受客户端网页消息事件 36 { 37 string clientUrl = socket.ConnectionInfo.ClientIpAddress + ":" + socket.ConnectionInfo.ClientPort; 38 //socket.ConnectionInfo.Headers["UserId"] = message; 39 string key = message.Replace("UserId=", ""); 40 dic_Sockets.Add(key, socket); 41 Console.WriteLine(DateTime.Now.ToString() + "|服务器:【收到】来客户端网页:" + clientUrl + "的信息:\n" + message); 42 }; 43 }); 44 45 Console.ReadKey(); 46 foreach (var item in dic_Sockets.Values) 47 { 48 if (item.IsAvailable == true) 49 { 50 item.Send("服务器消息:" + DateTime.Now.ToString()); 51 } 52 } 53 54 55 56 57 Console.ReadKey(); 58 59 //关闭与客户端的所有的连接 60 foreach (var item in dic_Sockets.Values) 61 { 62 if (item != null) 63 { 64 item.Close(); 65 } 66 } 67 68 Console.ReadKey();
2.客户端,直接建立一个Asp.net的一个Web空应用程序。在项目内直接新建一个Html文件
code:
<!DOCTYPE html><html lang="en" xmlns="http://www.w3.org/1999/xhtml"> <head><meta charset="utf-8" /><title>Fleck WebSocket</title><style>.div1 {height: 88px;width: 173px;border: 1px solid blue;margin: auto;}h4 {margin: auto;}</style><script>var webSocket = {};//创建websocktfunction CreateWebSocket() {webSocket = new WebSocket("ws://127.0.0.1:8002");webSocket.onopen = WebSokectOnOpen;webSocket.onmessage = WebSocketOnMessage;webSocket.onclose = WebSocketOnClose;};//建立连接事件function WebSokectOnOpen() {//alert("已经打开连接!");webSocket.Send("Open");};//监听事件function WebSocketOnMessage(event) {//监听来自服务端的数据alert(event.data);};function WebSocketOnClose() {//监听来自客户端的数据alert('Close');};//发送事件function WebSocketSendMsg() {//获取text中的值var text = document.getElementById("Text1").value;//发送到服务器webSocket.send(text);};</script> </head> <body οnlοad="CreateWebSocket()"><div class="div1"><input type="text" id="Text1" /><input type="button" οnclick="WebSocketSendMsg()" value="发送数据至服务端" /></div> </body> </html>
3.服务端启动后,可通过OnOpen,OnClose,OnMessage,OnError等监听事件处理不同的业务。该技术用在一些特定的场景还是不错的。
就到这里!