1. 创建类WebSocketTest:
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);
}
}
}
}
2. 在program.cs中进行绑定
app.UseWebSockets();
app.Map("/websocket/test", con =>
{
con.UseWebSockets();
con.Use(async (ctx, next) =>
{
//创建监听websocket
WebSocketTest ws = new WebSocketTest();
await ws.DoWork(ctx);
await next.Invoke();
});
});
3. 使用websocket在线工具模拟请求: