ASP.NET Core 3.1 WebApi 系列【五】使用WebSocket
阿新 • • 發佈:2022-03-08
上一篇中我們學習了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(newArraySegment<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建立成功,具體業務邏輯就可以在裡面寫了,是不是很簡單。