【websocket-sharp】使用


一 介紹

WebSocket# 提供了實現WebSocket協議客戶端和服務器。

WebSocket協議是基於TCP的一種新的網絡協議。它實現了瀏覽器與服務器全雙工(full-duplex)通信——允許服務器主動發送信息給客戶端

二 用法

 創建一個控制台程序,從Nuget添加引用websocket-sharp

 

public static void Main (string[] args)
  {
    var wssv=new WebSocketServer(null, 2018);//創建一個websocket服務對象,2018是端口號
    wssv.start();//開始接收websocket
    Console.ReadKey (true);
    wssv.Stop ();//關閉
  }

如果需要使用wss(比如微信小程序中,只接受wss不接受ws,)

則在創建websocket服務對象的第三個參數中加入如下代碼

  var ssl = new ServerSslConfiguration(new X509Certificate2
  (@"D:證書\132456.pfx", "123456"), false,
  System.Security.Authentication.SslProtocols.Tls11);
  var wssv = new WebSocketServer(null, 2018 , ssl);        

 

接着創建一個類繼承WebSocketBehavior

public class ChatRoom : WebSocketBehavior
    {
        protected override async Task OnMessage(MessageEventArgs e)
        { 
                //傳來的消息
                var memid = Context.GetQueryString().Result["memid"];//通過此方法可以獲取傳來的查詢字符串值 
                memberEntity = new tb_memberEntity();//會員實體類,此處會意即可,不貼具體代碼
                if (!memid.IsEmpty())
                {
                    memberEntity = new tb_memberBLL().GetEntity(memid);
                }
                else
                {
                    memberEntity.nickname = "游客";
                }
                StreamReader reader = new StreamReader(e.Data, Encoding.UTF8);//讀取發來的數據內容
                var msgStr = reader.ReadToEnd();
                    await Sessions.Broadcast(new
                    {
                        content = msgStr,
                        name = memberEntity.nickname,
                    }.ToJson());  //將准備好的內容發送給“收聽”的客戶端
        }
        protected override async Task OnClose(CloseEventArgs e)
        {
             //處理關閉連接的響應
        }

        protected override async Task OnOpen()
        {
             //處理打開連接的響應
        }

        protected override async Task OnError(WebSocketSharp.ErrorEventArgs e)
        { 
             //處理異常事件
            Console.WriteLine(e.Message + "\t\r" + DateTime.Now);
        }
}

回到剛剛的mian方法中,在wssv.Start();后插入如下代碼,相當於創建了一個聊天間

wssv.AddWebSocketService<ChatRoom >("roomName");

寫完收工,接着F5運行一下

三 測試

此處我通過html來實現客戶端

 1 <!DOCTYPE html>
 2 <html>
 3 <head>
 4     <meta charset="UTF-8">
 5     <title></title>
 6 </head>
 7 <body>
 8     <div id="messages">
 9     </div>
10     <input type="text" id="content" value="" />
11     <a id="sendbt" href="javascript:void(0);">發送</a>
12 </body>
13 
14 
15 <script src="https://cdn.bootcss.com/jquery/1.8.3/jquery.min.js"></script>
16 <script>
17     var ws;
18     function initWS() {
19         if ("WebSocket" in window) {
20             ws = new WebSocket("ws://localhost:2018/roomName");
21             ws.onopen = function (e) {
22                 console.log("Openened connection to websocket"); 
23             };
24             ws.onclose = function () {
25                 console.log("Close connection to websocket");
26                 // 斷線重連
27                 initWS();
28             }
29             ws.onerror = function (e) {
30                 console.info("出錯了");
31                 console.info(e);
32             }
33             ws.onmessage = function (e) {
34                 console.log("收到", e.data)
35                 $("#messages").append(e.data);
36             }
37         } else {
38             alert("您的瀏覽器不支持 WebSocket!");
39         }
40     }
41     initWS();
42     function sendMsg(msg, type) {
43         var sendJosn = JSON.stringify({ Msg: msg, msgType: 1 });
44         try {
45             ws.send(sendJosn);
46         } catch (e) {
47             console.info(e);
48         }
49     }
50     $(function () {
51         $("#sendbt").click(function () { 
52             var text = $("#content").val();
53             sendMsg(text, "1")
54             $("#content").val("");
55         })
56         $("#changebt").click(function () { 
57             sendMsg(text, "2")
58         })
59     })
60 </script>
61 </html>

 


免責聲明!

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



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