net-core-WebSocket-实现聊天
WebSocket 是一种在 Web 应用中实现双向通信的协议。在 .NET Core 中,我们可以使用 Microsoft.AspNetCore.WebSockets 包来实现 WebSocket。
本文将介绍如何使用 .NET Core 实现一个简单的聊天应用程序,使用 WebSocket 实现实时消息传递。
- 创建项目
首先,我们需要创建一个 .NET Core Web 应用程序。在 Visual Studio 中,选择 File -> New -> Project,然后选择 ASP.NET Core Web 应用程序模板。
在新项目对话框中,选择 Web 应用程序模板,并选择 ASP.NET Core 3.1。然后选择空项目模板。
- 添加 WebSocket 中间件
接下来,我们需要在应用程序中添加 WebSocket 中间件。在 Startup.cs 文件中,添加以下代码:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
// ...
app.UseWebSockets();
app.Use(async (context, next) =>
{
if (context.WebSockets.IsWebSocketRequest)
{
WebSocket webSocket = await context.WebSockets.AcceptWebSocketAsync();
await HandleWebSocketConnection(webSocket);
}
else
{
await next();
}
});
// ...
}
private async Task HandleWebSocketConnection(WebSocket webSocket)
{
// ...
}
首先,我们调用 UseWebSockets() 方法来启用 WebSocket 中间件。然后,我们使用 Use() 方法来创建一个中间件,检查当前请求是否是 WebSocket 请求。
如果是 WebSocket 请求,我们调用 AcceptWebSocketAsync() 方法来接受连接,并将 WebSocket 对象传递给 HandleWebSocketConnection() 方法处理。
- 实现聊天逻辑
现在,我们需要实现 HandleWebSocketConnection() 方法来处理 WebSocket 连接。在这个方法中,我们将使用一个 List 来存储所有连接的 WebSocket 实例。当一个 WebSocket 实例发送消息时,我们将将该消息发送给所有连接的 WebSocket 实例。
private static List<WebSocket> _webSockets = new List<WebSocket>();
private async Task HandleWebSocketConnection(WebSocket webSocket)
{
_webSockets.Add(webSocket);
var buffer = new byte[1024 * 4];
while (webSocket.State == WebSocketState.Open)
{
var result = await webSocket.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None);
var message = Encoding.UTF8.GetString(buffer, 0, result.Count);
foreach (var ws in _webSockets)
{
if (ws.State == WebSocketState.Open)
{
var responseBytes = Encoding.UTF8.GetBytes(message);
await ws.SendAsync(new ArraySegment<byte>(responseBytes, 0, responseBytes.Length), result.MessageType, result.EndOfMessage, CancellationToken.None);
}
}
}
_webSockets.Remove(webSocket);
}
在 HandleWebSocketConnection() 中,我们首先将 WebSocket 实例添加到 _webSockets 列表中。然后,我们通过循环接收消息,并将消息发送给所有 WebSocket 实例。如果一个 WebSocket 实例已经关闭,我们将从列表中删除它。
- 创建聊天页面
现在,我们需要创建一个简单的聊天页面来测试我们的应用程序。
在 wwwroot 文件夹下创建一个名为 index.html 的文件,并添加以下代码:
<!DOCTYPE html>
<html>
<head>
<title>WebSocket Chat</title>
</head>
<body>
<input type="text" id="message" />
<button onclick="sendMessage()">Send</button>
<div id="messages"></div>
<script>
var socket = new WebSocket("ws://" + window.location.host);
socket.onmessage = function (event) {
var messageDiv = document.createElement("div");
messageDiv.textContent = event.data;
document.getElementById("messages").appendChild(messageDiv);
};
function sendMessage() {
var message = document.getElementById("message").value;
socket.send(message);
}
</script>
</body>
</html>
这个页面包含一个文本框,一个发送按钮和一个消息列表。当用户单击发送按钮时,我们将发送文本框中的消息到服务器。
- 运行应用程序
现在,我们可以运行我们的应用程序,并在浏览器中打开 index.html 文件。在不同的浏览器选项卡中打开此页面,然后开始聊天。
当你在一个浏览器选项卡中发送一条消息时,这条消息将被发送到服务器,并传递给所有连接的浏览器选项卡。
这就是使用 .NET Core 实现 WebSocket 聊天应用程序的基本步骤。你可以使用这个基础来构建更复杂的实时 Web 应用程序。
原文地址: https://www.cveoy.top/t/topic/rAx 著作权归作者所有。请勿转载和采集!