using TouchSocket.Core; using TouchSocket.Http; using TouchSocket.Http.WebSockets; using TouchSocket.Sockets; var service = new HttpService(); await service.SetupAsync(new TouchSocketConfig()//加载配置 .SetListenIPHosts(7789) .ConfigureContainer(a => { a.AddConsoleLogger(); }) .ConfigurePlugins(a => { a.UseWebSocket()//添加WebSocket功能 .SetWSUrl("/ws")//设置url直接可以连接。 .UseAutoPong();//当收到ping报文时自动回应pong a.Add(); })); await service.StartAsync(); service.Logger.Info("websocket服务器已启动"); Console.ReadLine(); class MyReadWebSocketPlugin : PluginBase, IWebSocketReceivedPlugin, IWebSocketHandshakedPlugin { private readonly ILog m_logger; public MyReadWebSocketPlugin(ILog logger) { this.m_logger = logger; } public async Task OnWebSocketHandshaked(IWebSocket client, HttpContextEventArgs e) { await e.InvokeNext(); if (client.Client is IHttpSessionClient httpSessionClient) { var serviceStr = httpSessionClient.Id; await client.SendAsync(serviceStr); } } public async Task OnWebSocketReceived(IWebSocket client, WSDataFrameEventArgs e) { switch (e.DataFrame.Opcode) { case WSDataType.Cont: m_logger.Info($"收到中间数据,长度为:{e.DataFrame.PayloadLength}"); return; case WSDataType.Text: m_logger.Info(e.DataFrame.ToText()); return; case WSDataType.Binary: if (e.DataFrame.FIN) { m_logger.Info($"收到二进制数据,长度为:{e.DataFrame.PayloadLength}"); } else { m_logger.Info($"收到未结束的二进制数据,长度为:{e.DataFrame.PayloadLength}"); } return; case WSDataType.Close: { } return; case WSDataType.Ping: break; case WSDataType.Pong: break; default: break; } await e.InvokeNext(); } }