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) =>{//創建監聽websocketWebSocketTest ws = new WebSocketTest();await ws.DoWork(ctx);await next.Invoke();});
});
3. 使用websocket在線工具模擬請求: