.net 6 websocket 搭建私聊群聊功能
时间: 2024-02-16 16:04:27 浏览: 20
要使用 .NET 6 搭建 WebSocket 私聊和群聊功能,可以按照以下步骤进行:
1. 创建 ASP.NET Core Web 应用程序,并在 Startup.cs 中配置 WebSocket 中间件。
```
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
// ...
app.UseWebSockets();
// ...
}
```
2. 创建一个 WebSocket 处理程序,并在其中实现消息处理逻辑。可以通过继承 `WebSocketHandler` 类来实现。
```
public class ChatWebSocketHandler : WebSocketHandler
{
private readonly ConcurrentDictionary<string, WebSocket> _sockets = new();
public ChatWebSocketHandler(WebSocketHandlerOptions options) : base(options)
{
}
public override async Task OnConnectedAsync(WebSocket socket)
{
string socketId = GetSocketId(socket);
_sockets.TryAdd(socketId, socket);
await base.OnConnectedAsync(socket);
}
public override async Task OnDisconnectedAsync(WebSocket socket)
{
string socketId = GetSocketId(socket);
_sockets.TryRemove(socketId, out WebSocket removedSocket);
await base.OnDisconnectedAsync(socket);
}
public override async Task ReceiveAsync(WebSocket socket, WebSocketReceiveResult result, byte[] buffer)
{
string socketId = GetSocketId(socket);
string message = Encoding.UTF8.GetString(buffer, 0, result.Count);
// 处理消息逻辑
await BroadcastAsync(socketId, message);
}
private async Task BroadcastAsync(string senderSocketId, string message)
{
foreach (KeyValuePair<string, WebSocket> socket in _sockets)
{
if (socket.Key != senderSocketId)
{
await SendMessageAsync(socket.Value, message);
}
}
}
private static async Task SendMessageAsync(WebSocket socket, string message)
{
byte[] buffer = Encoding.UTF8.GetBytes(message);
await socket.SendAsync(new ArraySegment<byte>(buffer, 0, buffer.Length), WebSocketMessageType.Text, true, CancellationToken.None);
}
private static string GetSocketId(WebSocket socket)
{
return socket.GetHashCode().ToString();
}
}
```
3. 在 Controller 中处理 WebSocket 连接请求,并将请求转发给 WebSocket 处理程序。
```
[Route("/ws")]
public class ChatController : Controller
{
private readonly WebSocketHandler _webSocketHandler;
public ChatController(WebSocketHandler webSocketHandler)
{
_webSocketHandler = webSocketHandler;
}
[HttpGet]
public async Task Get()
{
if (HttpContext.WebSockets.IsWebSocketRequest)
{
WebSocket webSocket = await HttpContext.WebSockets.AcceptWebSocketAsync();
await _webSocketHandler.OnConnectedAsync(webSocket);
await _webSocketHandler.ReceiveAsync(webSocket, null, null);
await _webSocketHandler.OnDisconnectedAsync(webSocket);
}
else
{
HttpContext.Response.StatusCode = 400;
}
}
}
```
4. 在 JavaScript 中建立 WebSocket 连接,并发送消息。
```
const webSocket = new WebSocket("ws://localhost:5000/ws");
webSocket.onmessage = function(event) {
console.log(event.data);
};
webSocket.send("Hello, world!");
```
以上就是使用 .NET 6 搭建 WebSocket 私聊和群聊功能的基本步骤。具体实现细节可以根据实际需求进行调整。