WebSocket 是一种在 Web 应用中实现双向通信的协议。在 .NET Core 中,我们可以使用 Microsoft.AspNetCore.WebSockets 包来实现 WebSocket。

本文将介绍如何使用 .NET Core 实现一个简单的聊天应用程序,使用 WebSocket 实现实时消息传递。

  1. 创建项目

首先,我们需要创建一个 .NET Core Web 应用程序。在 Visual Studio 中,选择 File -> New -> Project,然后选择 ASP.NET Core Web 应用程序模板。

在新项目对话框中,选择 Web 应用程序模板,并选择 ASP.NET Core 3.1。然后选择空项目模板。

  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() 方法处理。

  1. 实现聊天逻辑

现在,我们需要实现 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 实例已经关闭,我们将从列表中删除它。

  1. 创建聊天页面

现在,我们需要创建一个简单的聊天页面来测试我们的应用程序。

在 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>

这个页面包含一个文本框,一个发送按钮和一个消息列表。当用户单击发送按钮时,我们将发送文本框中的消息到服务器。

  1. 运行应用程序

现在,我们可以运行我们的应用程序,并在浏览器中打开 index.html 文件。在不同的浏览器选项卡中打开此页面,然后开始聊天。

当你在一个浏览器选项卡中发送一条消息时,这条消息将被发送到服务器,并传递给所有连接的浏览器选项卡。

这就是使用 .NET Core 实现 WebSocket 聊天应用程序的基本步骤。你可以使用这个基础来构建更复杂的实时 Web 应用程序。

net-core-WebSocket-实现聊天

原文地址: https://www.cveoy.top/t/topic/rAx 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录