ASP.NET Core WebSocket 提供了一种在客户端和服务器之间进行全双工通信的机制。以下是一些使用 ASP.NET Core WebSocket 的技巧:
-
安装依赖项:确保安装了
Microsoft.AspNetCore.Http.Abstractions
和Microsoft.AspNetCore.WebSockets
NuGet 包。 -
配置 WebSocket:在
Startup.cs
文件中配置 WebSocket 中间件。public void ConfigureServices(IServiceCollection services) { services.AddControllersWithViews(); services.AddWebSocket(options => { options.AllowedOrigins = new[] { "*" }; }); } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Home/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseEndpoints(endpoints => { endpoints.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); endpoints.MapWebSocket("/ws", new WebSocketOptions() { KeepAliveInterval = TimeSpan.Zero }); }); }
-
处理 WebSocket 连接:创建一个类来处理 WebSocket 连接和消息。
public class MyWebSocketHandler { private readonly WebSocket _webSocket; public MyWebSocketHandler(WebSocket webSocket) { _webSocket = webSocket; } public async Task OnConnectedAsync(string userId) { await _webSocket.SendAsync(Encoding.UTF8.GetBytes($"Welcome, {userId}!")); } public async Task OnMessageReceivedAsync(string message) { var data = https://www.yisu.com/ask/Encoding.UTF8.GetString(message);"Echo: {data}")); } public async Task OnDisconnectedAsync(Exception exception) { Console.WriteLine($"Disconnected: {exception}"); } }
-
在控制器中使用 WebSocket:在控制器中处理 WebSocket 请求。
[HttpGet] public async Task
Index(string id) { if (HttpContext.WebSockets.IsWebSocketRequest()) { var webSocket = await HttpContext.WebSockets.AcceptWebSocketAsync(); var handler = new MyWebSocketHandler(webSocket); await handler.OnConnectedAsync(id); while (webSocket.State == WebSocketState.Open) { var buffer = new byte[1024 * 4]; WebSocketReceiveResult result; do { result = await webSocket.ReceiveAsync(new ArraySegment (buffer), CancellationToken.None); } while (!result.CloseStatus.HasValue); var message = Encoding.UTF8.GetString(buffer, 0, result.Count); await handler.OnMessageReceivedAsync(message); } await handler.OnDisconnectedAsync(null); } return View(); } -
客户端代码:在客户端使用 JavaScript 建立 WebSocket 连接。
WebSocket Example
这些技巧可以帮助你更好地使用 ASP.NET Core WebSocket 进行实时通信。