Fleck WebSocket使用
作為筆記存儲.
最近公司有這方面的使用需求。在網上查了一些資料后。得到了想要的結果。以下記錄摘抄至網上資料。
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 = {}; //創建websockt function 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 onload="CreateWebSocket()"> <div class="div1"> <input type="text" id="Text1" /> <input type="button" onclick="WebSocketSendMsg()" value="發送數據至服務端" /> </div> </body> </html>
3.服務端啟動后,可通過OnOpen,OnClose,OnMessage,OnError等監聽事件處理不同的業務。該技術用在一些特定的場景還是不錯的。
就到這里!