.Net6使用WebSocket与前端进行通信

  1. 创建类WebSocketTest:
cs 复制代码
using System.Net.WebSockets;
using System.Text;

namespace WebSocket.Demo
{
    public class WebSocketTest
    {
        //当前请求实例
        System.Net.WebSockets.WebSocket socket =null;
        public async Task DoWork(HttpContext ctx)
        {
            socket = await ctx.WebSockets.AcceptWebSocketAsync();
            //执行监听
            await EchoLoop();
        }
        public async Task EchoLoop()
        {
            //创建缓存区
            var buffer = new byte[1024];
            var arraySeg = new ArraySegment<byte>(buffer);
            while (this.socket.State == WebSocketState.Open)
            {
                var incoming = await this.socket.ReceiveAsync(arraySeg, CancellationToken.None);
                //判断类型读取
                if (incoming.MessageType == WebSocketMessageType.Text)
                {
                    //incoming.Count  代表,请求内容字节数量
                    string userMessage = Encoding.UTF8.GetString(arraySeg.Array, 0, incoming.Count);
                    //接收客户端的字符串
                    userMessage = "客户端信息: " + userMessage + " 。时间: " +
                        DateTime.Now.ToLongTimeString();
                    ArraySegment<byte> segResult = new ArraySegment<byte>(Encoding.UTF8.GetBytes(userMessage));
                    await socket.SendAsync(segResult, WebSocketMessageType.Text, true, CancellationToken.None);
                }
                else
                {
                }

                byte[] backInfo = System.Text.UTF8Encoding.Default.GetBytes("服务端相应内容结束");
                var outgoing = new ArraySegment<byte>(backInfo, 0, backInfo.Length);
                await this.socket.SendAsync(outgoing, WebSocketMessageType.Text, true, CancellationToken.None);
            }
        }
    }
}
  1. 在program.cs中进行绑定
cs 复制代码
/*创建一个WebSocket中间件,并将WebSocket请求路由到"/websocket/test"路径上。在处理WebSocket请求时,通过WebSocketTest.DoWork方法来处理连接和消息*/

app.UseWebSockets();
app.Map("/websocket/test", con => //当收到"/websocket/test"请求时,执行以下代码
{
    con.UseWebSockets();          //中间件,启用websocket支持
    con.Use(async (ctx, next) =>  //处理websocket请求时,执行以下逻辑
    {
        //创建监听websocket
        WebSocketTest ws = new WebSocketTest();
        await ws.DoWork(ctx);
        await next.Invoke();      //执行下一个中间件
    });
});
  1. 使用websocket在线工具模拟请求:
相关推荐
tobias.b2 小时前
JumpServer4\.10\.16离线部署\+外部Nginx反向代理 解决30分钟空闲断开WebSocket超时(延长10天)
运维·websocket·nginx
Jacob程序员3 小时前
WebSSH技术实现全解析
linux·运维·服务器·websocket
brycegao3215 小时前
金融交易App客户端架构实战 | 模块化、WebSocket治理、多线路容灾全解
websocket·金融·组件化·android架构·客户端模块化·移动端稳定性·多线路网络
123的故事5 小时前
工具分享(2)-NSmartProxy内网穿透工具。
c#·.net·nsmartproxy
SEO-狼术7 小时前
Bring Agentic AI to RAD Studio
.net
ttwuai7 小时前
XYGo Admin 扩展开发:WebSocket 事件注册与实时推送实战
python·websocket·网络协议·golang·后台框架
足球中国8 小时前
.net winform 仿excel控件 开源地址 https://github.com/yufb12/dataexcel_winform
.net
周杰伦fans8 小时前
深入浅出AutoCAD .NET二次开发:HostApplicationServices完全解析
数据库·.net
caimouse8 小时前
Godot 4.7 内嵌 C# 模块切换到 .NET 9.0 编译指南
c#·.net·godot
rockey62718 小时前
基于AScript的SQL脚本语言发布啦!
sql·c#·.net·script·expression·动态脚本