.net6搭建websocket

发布时间 2023-06-30 11:10:52作者: zuiaixiaoyadan

当使用.NET 6构建WebSocket微服务时,可以按照以下步骤进行操作:

1. 创建新的.NET 6项目:打开适用于.NET 6的IDE(如Visual Studio 2022或Visual Studio Code),创建一个新的空白项目。

.net6默认引入了Microsoft.AspNetCore.WebSockets 2,3步骤省略

2. 添加WebSocket支持:确保项目引用了`Microsoft.AspNetCore.WebSockets`包。可以通过NuGet包管理器或添加`<PackageReference>`到项目文件(.csproj)中来完成引用。

3. 配置Startup类:在项目中创建一个名为`Startup.cs`的类,并配置WebSocket支持。在`ConfigureServices`方法中,添加以下代码来启用WebSocket支持:

public void ConfigureServices(IServiceCollection services)
{
services.AddWebSocket();
}

 

4. 添加WebSocket控制器:在项目中创建一个名为`WebSocketController.cs`的类,并继承`ControllerBase`。在该控制器中,添加以下代码来处理WebSocket连接和消息:

 

 

5. 创建WebSocket处理程序:在项目中创建一个名为`WebSocketHandler.cs`的类,并实现处理WebSocket连接和消息的逻辑。

public class WebSocketHandler
{
private readonly WebSocketConnections _connections;

public WebSocketHandler(WebSocketConnections connections)
{
_connections = connections;
}

public async Task HandleConnection(WebSocket webSocket)
{
// 添加WebSocket连接到连接管理器
_connections.Add(webSocket);

try
{
byte[] buffer = new byte[1024];
WebSocketReceiveResult result = await webSocket.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None);

while (!result.CloseStatus.HasValue)
{
// 处理接收到的消息
string message = Encoding.UTF8.GetString(buffer, 0, result.Count);
await ProcessMessage(message);

// 继续接收下一个消息
result = await webSocket.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None);
}

// 关闭WebSocket连接
await webSocket.CloseAsync(result.CloseStatus.Value, result.CloseStatusDescription, CancellationToken.None);
}
finally
{
// 从连接管理器中移除WebSocket连接
_connections.Remove(webSocket);
}
}

private async Task ProcessMessage(string message)
{
// 处理接收到的消息逻辑

//在这里增加
// ...
}
}

 发送给指定用户

 

6. 配置WebSocket连接管理器:在项目中创建一个名为`WebSocketConnections.cs`的类,用于管理WebSocket连接。

以下是一个简单的实现示例:


public class WebSocketConnections
{
private readonly List<WebSocket> _connections = new List<WebSocket>();

public void Add(WebSocket webSocket)
{
_connections.Add(webSocket);
}

public void Remove(WebSocket webSocket)
{


_connections.Remove(webSocket);
}

public async Task SendToAll(string message)
{
var buffer = Encoding.UTF8.GetBytes(message);
foreach (var connection in _connections)
{
await connection.SendAsync(new ArraySegment<byte>(buffer), WebSocketMessageType.Text, true, CancellationToken.None);
}
}
}
```其中可创建两个字典集合用于储存在连接的信息,做后续拓展

 

7. 配置WebSocket路由:在`Configure`方法中,添加WebSocket路由配置。在`Startup.cs`文件的`Configure`方法中,添加以下代码:

app.UseWebSockets();
app.UseRouting();

app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});

8. 启动微服务:在适用于.NET 6的IDE中启动项目,WebSocket微服务将在指定的URL上监听WebSocket连接。

现在,你已经创建了一个基本的WebSocket微服务。你可以通过访问`ws://yourserveraddress/ws`来建立WebSocket连接,并处理接收到的消息。根据你的需求,你可以进一步扩展WebSocket处理程序和控制器来满足特定的业务需求。