如何 ASP.NET Core 中使用 WebSocket

如何在 ASP.NET Core 中使用 WebSocket

在现代 Web 应用程序中,WebSocket 连接非常流行且使用率极高。它可以帮助企业满足数字环境需求,并处理来自最终用户的实时数据。它还能提升生产力、输出率和用户体验。

如果您还没有使用 WebSocket,那么您应该开始在 ASP.NET Core 应用程序中使用它。它将帮助您在这个充满活力的市场中实现预期的业务成果。要了解其实现方式,请进一步探索提供的流程。

ASP.NET Core 应用程序中的 WebSocket 是什么?

在 ASP.NET Core 应用程序中,Web Sockets 启用了一种在服务器和客户端之间建立低开销通信的协议。它允许服务器-客户端架构中的设备持续通信,直到其中一方关闭连接。

在实时应用中,WebSocket 起着主要作用,因为它们使服务器能够接收持续更新的数据。这种连接本质上是双向的,并且需要 HTTP 支持才能实现稳定性、性能和速度。

何时在 ASP.NET Core 项目中实现 WebSocket 连接功能?

只有符合以下要求或用例时,才应在 ASP.NET Web API 应用程序和其他应用程序中实现 WebSockets。

    ✓ 开发实时应用程序,如聊天室、金融科技或企业系统。
    ✓ 构建一个在线游戏应用程序,其中服务器接收不断的客户端更新。
    ✓ 当您需要刷新 UI 而用户没有要求时。
    ✓ 用于构建供内部、部门内或建筑物内使用的聊天应用程序。
    ✓ 创建用于实时股票和股份交易的外汇和交易系统。

同样,您可以确定您的需求是否属于这些场景。为了更好地澄清,请咨询.NET 开发公司或聘请 .NET Core 开发人员。

深入了解 ASP.NET Core 应用程序中的 Web Sockets:一个实际示例

在这里,我们将学习 ASP.NET Core 项目中 WebSocket 的功能。完成本教程后,您将了解 ASP.NET Web API 应用程序的 WebSocket 通信配置的基础知识。

首先,下载、安装并打开最新版本的 Visual Studio IDE。本教程将使用 .NET 6.0 框架。您可以使用更高版本,但在实施之前,请检查其对协议的支持情况。

该过程分为三个主要阶段,概述如下:

    ✓ 第 1 阶段:服务器端配置
    ✓ 第 2 阶段:客户端配置
    ✓ 第 3 阶段:测试 WebSockets 通信

让我们从过程开始。

阶段 1:服务器端配置

    ✓ 步骤 1:在 Visual Studio IDE 中,创建一个空的 ASP.NET Core 项目,使用 C#作为其主要编程语言。

在每个项目设置屏幕上,您都会在右下角找到“下一步/创建”按钮。填写详细信息并选择可靠的选项后,点击该按钮继续操作。

步骤 2:在“配置新项目”屏幕上,根据您的需求填写项目详细信息。在本教程中,我们使用“ SimpleWS-Server ”作为项目和解决方案名称。

步骤 3:在“附加信息”屏幕上,选择.NET 6.0,其余设置保持不变。确保所有设置与以下代码片段中的设置一致。

步骤 4:项目生成后,您将在“解决方案资源管理器”选项卡中看到其所有关联文件。此外,它将显示如下所示的默认 Hello World 代码。您必须将app.Run ()方法替换为 app.RunAsync()。

步骤 5:现在,我们将添加UseWebSockets()函数和builder.WebHost.UserUrls()方法。

该函数将使我们的应用程序能够使用 WebSocket 通信。该方法将有助于定义服务器的端口和 URL,在本例中为“ http://localhost:6969 ” 。

步骤 6:在 WebSocket 函数之后,配置服务器的端点映射。我们将使用app.Map()方法,并将 WebSocket 路由设置为“ ws ”。此外,我们还将在同一方法中添加上下文。

步骤 7:应用程序中的上下文。需要配置map ()方法。在其中,我们将添加仅接受/允许 WebSocket 通信的逻辑。

为此,您必须添加 context.WebSockets.IsWebSocketRequest检查。如果请求是 Web 套接字,ASP.NET Core 应用程序将接受它;否则,将发送 400 错误(错误请求)。

步骤8:一旦应用程序确认这是一个Web套接字连接,它就应该为其定义一个实例。为此,请添加以下代码。

using var ws = await context.WebSockets.AcceptWebSocketAsync(); 

该实例将有助于使用ws.State验证当前连接状态。

在上面的代码片段中,您可以看到 Web Socket 可以经历的所有七种连接状态。每个状态都有一个对应的值,用于确定当前状态。

步骤9:要使服务器能够发送消息,请使用WebSocket 实例上的SendAsync()方法。它接受以下参数。

    ✓ ArraySegment<byte>
    ✓ WebSocketMessageType enum
    ✓ Bool endofMessage
    ✓ CancelationToken

所有这些参数都需要转换为字节数组,从而生成ArraySegment<byte>并向客户端发送消息。

var message = "Hello World!";
var bytes = Encoding.UTF8.GetBytes(message);
var arraySegment = new ArraySegment<byte>(bytes, 0, bytes.Length);
await ws.SendAsync(arraySegment,
                    WebSocketMessageType.Text,
                    true,
                    CancellationToken.None); 

步骤 10:为了让 WebSocket 服务器以“ HH:MM:SS ”格式返回当前时间给客户端,请将以下逻辑包装在 while(true) 循环中,如下所示。该逻辑还使用Thread.Sleep(1000)函数将进程延迟 1 秒。

此外,代码将验证 WebSocket 连接状态,仅当检测到打开状态时才发送消息。

到这里,服务器端配置就完成了。我们的 WebSockets 服务器已经准备好了。

阶段 2:客户端配置

让我们创建 WebSocket 客户端。

步骤 1:打开您的 Visual IDE以使用 C# 作为编程语言创建 .NET 控制台应用程序。

步骤 2:填写项目详细信息。在本教程中,我们使用SimpleWS-Client作为解决方案和项目名称。

步骤 3: 选择.NET 6.0框架并创建项目。

步骤 4:为了使客户端设备能够启动 Web 套接字连接,我们将使用System.Net.WebScokets提供的ClientWebSocket。

using System.Net.WebSockets;

var ws = new ClientWebSocket(); 

步骤 5:要连接WebSockets服务器,请使用以下代码块。它包含带有取消令牌和URL的ConnectAsync方法。

await ws.ConnectAsync(new Uri("ws://localhost:6969/ws"), CancellationToken.None); 

步骤 6:编写代码,让客户端在连接状态变为alive后接收来自服务器的消息。

步骤 7:为了接收来自 WebSockets 服务器的消息,我们将RecieveAsync()方法添加到客户端代码库。它将使客户端设备能够接受取消令牌和ArraySegment<byte>。

此外,您还将创建一个字节数组缓冲区来生成 ArraySegment<byte>。

步骤 8:使用上述所有代码,我们的结果仍然是字节数组格式。但是,我们希望它显示为字符串。因此,我们必须使用Encoding.UTF8.GetString()方法实现编码。

另外,添加以下代码来检查连接是否未关闭。

result.MessageType == WebSocketMessageType.Close

步骤 9: 检查代码。确保最终的客户端代码与以下内容相同。

步骤 10: 测试 WebSockets 服务器和客户端的功能。首先运行服务器项目,然后运行客户端项目。如果显示当前时间(HH:MM:SS)格式,则表示配置成功。

到目前为止,我们已经针对一个客户端测试了 WebSockets 项目。但是在实际场景中,可能会有多个最终用户。因此,在下一阶段,我们将测试它处理多个 WebSocket 通信的能力。

阶段 3:测试 WebSockets 通信

为了测试多个 WebSocket 连接,我们将创建并使用一个聊天室应用程序。它将包含以下功能:

    ✓ 连接多个用户并为他们创建实例。
    ✓ 要求每个用户输入他们的用户名/姓名。
    ✓ 广播聊天室、加入和离开通知。
    ✓ 聊天室中每个用户接收和发送消息。
    ✓ 通过检查 WebSocket 连接状态来删除客户端实例。

与前两个阶段的配置类似,我们将首先编写服务器的代码,然后编写客户端的代码。

服务器代码

您的完整服务器代码将是以下代码库。

让我们分解一下代码。首先,你会找到代码的用途,以及它下面执行该过程的代码部分。

用于跟踪多个 WebSocket连接。

为了向每个最终用户/客户端广播消息,使用SendAsync()方法。

用于模拟聊天室并广播新连接客户端的用户名。

为了管理消息接收过程,将使用类似于客户端配置的RecieveAsync() 方法。

在WS 处理中调用 ReceiveMessage() 函数。

为了在聊天室中广播收到的消息,使用Action<WebSocketReceiveResult, byte[]> handleMessage修改了 ReceiveMessage() 函数。

此外,我们修改了 ReceiveMessage 调用,使 lambda 函数能够通过。此外,我们还将在 lambda 函数中添加逻辑,以便将一个用户的消息广播给聊天室中所有其他用户。

下面的代码用于跟踪离开聊天室的用户。它检测 WebSocket 状态以确定客户端是否存在。

客户端代码

在客户端添加以下代码块用于输入用户名。

使用以下代码向服务器发送消息,该消息随后将在聊天室中广播。这里,将在 ClientWebSocket 实例上使用 SendAsync() 方法。

要管理退出聊天室的客户端,请使用以下代码。它将告诉应用程序删除该特定客户端的 WebSocket 实例。

现在客户端代码已经完成,只剩下测试部分。

要测试聊天室应用程序,请运行服务器和客户端项目。如果看到“用户加入房间”消息,则表示ASP.NET Core 应用运行成功。

现在,创建另一个客户端实例,以验证服务器是否正在检测并广播新的用户加入通知。输出将类似于以下内容。

进一步,从第二个实例发送消息并持续监视第一个客户端接收消息。

现在,关闭第二个实例的连接并打开一个新客户端(第三个客户端)。

类似地,您可以发送消息、添加新客户端、删除当前客户端以及广播消息来测试 ASP.NET Core WebSockets 应用程序。

总结 ASP.NET Core 中的 WebSockets

实时应用程序广泛使用 WebSocket,在服务器-客户端架构中提供双向通信。要实现它,您首先应该选择正确的用例,正如本博客中所述。此外,您可以按照提供的步骤了解其实现方式。

如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

csdn_aspnet

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值