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创建成功,具体业务逻辑就可以在里面写了,是不是很简单。

posted @ 2022-03-08 17:01  你去了龙城我留了姑苏  阅读(3723)  评论(1编辑  收藏  举报