ASP.NET Core 3.1 WebApi 系列【五】使用WebSocket


上一篇中我們學習了ASP.Net Core 3.1 中使用JWT認證,這一篇繼續學習WebSocket的使用方式。

WebSocket介紹:

      WebSocket是一種在單個TCP連接上進行全雙工通信的協議。WebSocket通信協議於2011年被IETF定為標准RFC 6455,並由RFC7936補充規范。WebSocket API也被W3C定為標准。
      WebSocket使得客戶端和服務器之間的數據交換變得更加簡單,允許服務端主動向客戶端推送數據。在WebSocket API中,瀏覽器和服務器只需要完成一次握手,兩者之間就直接可以創建持久性的連接,並進行雙向數據傳輸。 --百度百科 

 

本教程不討論SignalR,它將完全基於WebSocket通信,下面我們直接上步驟。

一、創建一個名為WebSocketsController的新控制器類,添加如下代碼。

 [HttpGet]
        public async Task GetNotReadCount()
        {
            if (HttpContext.WebSockets.IsWebSocketRequest)
            {
                using var webSocket = await HttpContext.WebSockets.AcceptWebSocketAsync();
                await Echo(webSocket);
            }
            else
            {
                HttpContext.Response.StatusCode = 400;
            }
        }

        private async Task Echo(WebSocket webSocket)
        {
            var buffer = new byte[1024 * 4];
            var result = await webSocket.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None);
            while (!result.CloseStatus.HasValue)
            {
                var serverMsg = Encoding.UTF8.GetBytes($"服務端返回: {Encoding.UTF8.GetString(buffer)}");
                await webSocket.SendAsync(new ArraySegment<byte>(serverMsg, 0, serverMsg.Length), result.MessageType, result.EndOfMessage, CancellationToken.None);
                result = await webSocket.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None);
            }
            await webSocket.CloseAsync(result.CloseStatus.Value, result.CloseStatusDescription, CancellationToken.None);
        }

二、在中間件管道中啟用websoket中間件,在Configure方法中啟用驗證 

app.UseWebSockets();

代碼執行步驟:

1、檢查當前請求是否通過WebSockets,否則拋出400。

2、等待,直到客戶端發起請求。

3、進入一個循環,直到客戶端關閉連接。

4、在循環中,我們將發送“服務端返回: <client’s message>”信息,並把它發回給客戶端。

5、等待,直到客戶端發送另一個請求(測試用,實際中去掉等待)。

三、postman測試websoket

注意:Postman v8.5 及更高版本的公共測試版中可用。

1、新建websoket請求。

 

 2、輸入地址,點擊鏈接。

 

 3.代表連接成功。

 

 4、客戶端發送信息。

 

 5、控制台顯示客戶端與服務端發送的消息。

 

 6、正常顯示信息則代表websoket創建成功,具體業務邏輯就可以在里面寫了,是不是很簡單。


免責聲明!

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



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