1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
|
app.Use(async (context, next) => { if(context.Request.Path == "/ws") { if(context.WebSockets.IsWebSocketRequest) { WebSocket webSocket = await context.WebSockets.AcceptAsync(); await Echo(context, WebSocket); } else { context.Response.StatusCode = 400; } } });
private async Task Echo(HttpContext context, WebSocket webSocket) { var buffer = new byte[1024 * 4];
WebSocketReceiveResult result = await webSocket.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None); while(!result.CloseStatus.HasValue) { await webSocket.SendAsync(new ArraySegment<byte>(buffer, 0, result.Count), result.MessageType, result.EndOfMessage, CancellationToken.None);
result = await webSocket.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None); } await webSocket.CloseAsync(result.CloseStatus.Value, result.CloseStatusDescription, CancellationTaken.None); }
var abuffer = Encoding.ASCII.GetBytes("Hola, This is robert from cnblogs"); await webSocket.SendAsync(new ArraySegment<byte>(abuffer, 0, abuffer.Length), result.MessageType, result.EndOfMessage, CancellationToken.None); result = await webSocket.ReceiveAsync(new ArraySegment<byte>(abuffer), CancellationToken.None);
|