ASP.NET Core WebSocket 提供了对 WebSocket 协议的支持,使得在 ASP.NET Core 应用程序中处理实时通信变得简单。以下是如何在 ASP.NET Core 中使用 WebSocket 的基本步骤:
- 创建一个 WebSocket 中间件:
首先,创建一个继承自 WebSocketMiddleware
的类,并重写 InvokeAsync
方法。在这个方法中,你可以处理 WebSocket 连接、消息和关闭事件。
public class MyWebSocketMiddleware { private readonly RequestDelegate _next; public MyWebSocketMiddleware(RequestDelegate next) { _next = next; } public async Task InvokeAsync(HttpContext context) { if (context.Request.Path == "/ws") { // 处理 WebSocket 连接 await HandleWebSocketConnection(context); } else { // 处理其他请求 await _next(context); } } private async Task HandleWebSocketConnection(HttpContext context) { // 创建一个 WebSocket 连接 var webSocket = new ClientWebSocket(); // 连接到 WebSocket 服务器 var connectionOptions = new WebSocketOptions { SubProtocol = "my-protocol" }; await webSocket.ConnectAsync(new Uri("ws://your-websocket-server"), connectionOptions); // 读取和发送消息 var buffer = new byte[1024 * 4]; WebSocketReceiveResult result; do { result = await webSocket.ReceiveAsync(new ArraySegment(buffer), CancellationToken.None); if (result.CloseStatus != null) { // 处理 WebSocket 关闭事件 break; } // 处理接收到的消息 var message = Encoding.UTF8.GetString(buffer, 0, result.Count); Console.WriteLine($"Received message: {message}"); // 发送消息回客户端 var responseMessage = Encoding.UTF8.GetBytes($"Echo: {message}"); await webSocket.SendAsync(new ArraySegment (responseMessage), result.MessageType, result.CloseStatus.Value =https://www.yisu.com/ask/= WebSocketCloseStatus.NormalClosure);>
- 在
Startup.cs
中注册 WebSocket 中间件:在
Startup.cs
文件的Configure
方法中,将新创建的 WebSocket 中间件添加到中间件管道中。public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Home/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); // 注册 WebSocket 中间件 app.UseMiddleware(); app.UseRouting(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); }); } 现在,当客户端连接到
/ws
路径时,将使用MyWebSocketMiddleware
类处理 WebSocket 连接。你可以在HandleWebSocketConnection
方法中根据需要实现自定义逻辑,例如处理消息、广播消息给其他客户端等。