在.NET Core中,WebSocket是一种常用的通信协议,它提供了一个全双工的通信通道,使得客户端和服务器之间可以实时地发送和接收数据
在项目中使用WebSocket,首先需要安装Microsoft.AspNetCore.WebSockets包。可以通过NuGet包管理器或者在项目文件夹下的.csproj文件中添加以下代码来安装:
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.WebSockets" Version="5.0.10" />
</ItemGroup>
在Startup类的Configure方法中,添加WebSocket中间件。这将允许应用程序处理WebSocket请求。
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
// ...
app.UseWebSockets();
// ...
}
创建一个新的类,用于处理WebSocket连接。这个类需要继承自Microsoft.AspNetCore.Http.Connections.ConnectionHandler类,并重写OnConnectedAsync、OnDisconnectedAsync和OnReceiveAsync方法。
using Microsoft.AspNetCore.Http.Connections;
using System.Threading.Tasks;
public class MyWebSocketHandler : ConnectionHandler
{
public override Task OnConnectedAsync(ConnectionContext connection)
{
// 处理连接建立时的逻辑
return base.OnConnectedAsync(connection);
}
public override Task OnDisconnectedAsync(ConnectionContext connection)
{
// 处理连接断开时的逻辑
return base.OnDisconnectedAsync(connection);
}
public override Task OnReceiveAsync(ConnectionContext connection, byte[] data)
{
// 处理接收到的数据
return base.OnReceiveAsync(connection, data);
}
}
在Startup类的Configure方法中,添加一个路由,将WebSocket请求映射到刚刚创建的处理器。
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
// ...
app.UseEndpoints(endpoints =>
{
endpoints.MapConnectionHandler<MyWebSocketHandler>("/ws");
});
// ...
}
客户端可以使用标准的WebSocket API连接到服务器。以下是一个JavaScript示例:
const socket = new WebSocket('ws://localhost:5000/ws');
socket.onopen = (event) => {
console.log('WebSocket连接已打开', event);
};
socket.onmessage = (event) => {
console.log('WebSocket收到消息', event.data);
};
socket.onclose = (event) => {
console.log('WebSocket连接已关闭', event);
};
socket.onerror = (event) => {
console.error('WebSocket错误', event);
};
现在,当客户端连接到服务器时,服务器会接收到WebSocket连接请求,并触发MyWebSocketHandler中的OnConnectedAsync方法。客户端可以通过WebSocket API发送和接收数据,服务器端可以在MyWebSocketHandler的OnReceiveAsync方法中处理接收到的数据。当连接关闭时,服务器会触发OnDisconnectedAsync方法。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。