Fleck WebSocket使用


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等監聽事件處理不同的業務。該技術用在一些特定的場景還是不錯的。

 

 

 

 

     就到這里!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM