TouchSocket: TouchSocket是.Net(包括 C# 、VB.Net、F#)的一个整合性的socket网络通信框架。包含了 tcp、udp、ssl、http、websocket、rpc、jsonrpc、webapi、xmlrpc等一系列的通信模块。一键式解决 tcp 黏分包问题,udp大数据包分片组合问题等。使用协议模板,可快速实现「固定包头」、「固定长度」、「区间字符」等一系列的数据报文解析。
https://gitee.com/RRQM_Home/TouchSocket
启动一个websocket 服务
HttpService service = new HttpService()
定义websocket的端口
service.Setup(new TouchSocketConfig()//加载配置
.UsePlugin()
.SetListenIPHosts(new IPHost[] { new IPHost(8080) })
.ConfigureContainer(a =>
{
a.AddConsoleLogger();
})
.ConfigurePlugins(a =>
{
a.UseWebApi();
a.UseWebSocket().SetWSUrl("/")
.SetCallback(WSCallback);
}))
.Start();
接收消息
private void WSCallback(ITcpClientBase client, WSDataFrameEventArgs e)
{
switch (e.DataFrame.Opcode)
{
case WSDataType.Cont:
Console.WriteLine($"收到中间数据,长度为:{e.DataFrame.PayloadLength}");
break;
case WSDataType.Text:
Console.WriteLine(e.DataFrame.ToText());
// 这个地方写 逻辑
break;
case WSDataType.Binary:
if (e.DataFrame.FIN)
{
Console.WriteLine($"收到二进制数据,长度为:{e.DataFrame.PayloadLength}");
}
else
{
Console.WriteLine($"收到未结束的二进制数据,长度为:{e.DataFrame.PayloadLength}");
}
break;
case WSDataType.Close:
{
Console.WriteLine("远程请求断开");
client.Close("断开");
}
break;
case WSDataType.Ping:
break;
case WSDataType.Pong:
break;
default:
break;
}
}
js代码的调用
this.ws = new window.WebSocket("ws://localhost:8080/");
that = this;
this.ws.onmessage = function (e) {
alert(e.data);
that.ws.send("helloworld");
}
this.ws.onopen = function () {
alert("已经连接");
}
this.ws.onclose = function () {
alert("连接关闭");
}