WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议,它使得客户端和服务器之间的实时交互成为可能。在 ASP.NET MVC 中,你可以使用 ASP.NET Core 的 WebSocket 功能来实现实时应用。
以下是在 ASP.NET MVC 中使用 WebSocket 的基本步骤:
在 Startup.cs
文件中,你需要添加一个新的路由,以便将 WebSocket 请求映射到相应的控制器方法。例如:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
// ... 其他中间件配置
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
endpoints.MapWebSocketRoute(
name: "websocket",
path: "/ws",
handler: "WebSocketController:Connect"
);
});
}
接下来,你需要创建一个名为 WebSocketController
的控制器,并在其中定义 Connect
方法来处理 WebSocket 连接。例如:
public class WebSocketController : ControllerBase
{
private readonly IHubContext<MyWebSocketHub> _hubContext;
public WebSocketController(IHubContext<MyWebSocketHub> hubContext)
{
_hubContext = hubContext;
}
[HttpGet]
public async Task<IActionResult> Connect()
{
var connectionId = Guid.NewGuid().ToString();
await _hubContext.Clients.AddAsync(connectionId, "MyWebSocketHub");
return new JsonResult(new { success = true, connectionId });
}
}
为了实现实时通信,你需要创建一个 WebSocket Hub。在项目中添加一个新的类,例如 MyWebSocketHub.cs
,并继承自 Hub
类。例如:
public class MyWebSocketHub : Hub
{
public async Task SendMessage(string message)
{
await Clients.All.SendAsync("ReceiveMessage", message);
}
}
现在你可以在客户端(例如 JavaScript)中使用 WebSocket API 建立与服务器的连接。例如:
const socket = new WebSocket('ws://localhost:5000/ws');
socket.addEventListener('open', (event) => {
console.log('WebSocket connection opened:', event);
socket.send('Hello, server!');
});
socket.addEventListener('message', (event) => {
console.log('WebSocket message received:', event.data);
});
socket.addEventListener('close', (event) => {
console.log('WebSocket connection closed:', event);
});
在 MyWebSocketHub
类中,你可以覆盖 OnMessage
方法来处理从客户端接收到的消息。例如:
public override async Task OnMessageAsync(string message)
{
var receivedMessage = message;
await Clients.All.SendAsync("ReceiveMessage", receivedMessage);
}
这样,你就可以在 ASP.NET MVC 中使用 WebSocket 实现实时应用了。根据你的需求,你可以根据需要扩展这个示例,例如添加身份验证、消息持久化等功能。