.NET 10 新功能新增功能介绍:WebSocket 功能增强(一)

admin3个月前河内机器人53

在 .NET 10 的更新中,WebSocket 功能得到了显著增强,为开发者提供了更强大、更灵活的实时

通信能力。WebSocket 作为一种在单个 TCP 连接上进行全双工通信的协议,在现代 Web 应用中

扮演着至关重要的角色,尤其是在需要实时数据交换的场景,如在线游戏、即时聊天、实时数据监

控等。本文将深入探讨 .NET 10 中 WebSocket 功能的增强,包括新 API 的引入、性能优化、安全

性提升以及与其他技术的集成改进。


一、WebSocket 新 API 的引入

1.1 WebSocketClient 类的增强


在 .NET 10 中,WebSocketClient 类得到了显著增强,提供了更多实用的方法和属性,使得 

WebSocket 客户端的使用更加便捷和高效。


新增 SendAsync 方法的重载‌:SendAsync 方法现在支持更多的参数选项,如 WebSocketMessageType 

和 CancellationToken,这使得开发者可以更灵活地控制消息的发送过程。例如,可以通过指定

WebSocketMessageType 为 Text 或 Binary 来发送不同类型的消息,或者通过 CancellationToken 

来取消正在进行的发送操作。


csharp

Copy Code

await webSocketClient.SendAsync(new ArraySegment<byte>(messageBytes), 

WebSocketMessageType.Binary, CancellationToken.None);



新增 CloseAsync 方法的重载‌:CloseAsync 方法现在支持更多的关闭状态码和关闭原因,这使得

开发者可以更准确地描述关闭连接的原因,有助于调试和错误处理。


csharp

Copy Code

await webSocketClient.CloseAsync(WebSocketCloseStatus.NormalClosure, 

"Connection closed by user", CancellationToken.None);


1.2 WebSocketServer 类的增强


WebSocketServer 类在 .NET 10 中也得到了增强,提供了更多实用的方法和属性,

使得 WebSocket 服务器的搭建更加便捷和高效。


新增 Start 和 Stop 方法的重载‌:Start 和 Stop 方法现在支持更多的参数选项,如 Port 和 

Host,这使得开发者可以更灵活地配置服务器的启动和停止参数。


csharp

Copy Code

webSocketServer.Start(8080, "localhost");



新增 OnMessageReceived 事件‌:OnMessageReceived 事件现在提供了更多的上下文信息,

如 WebSocketSession 和 WebSocketMessageType,这使得开发者可以更准确地处理接收到的消息。


csharp

Copy Code

webSocketServer.OnMessageReceived += (session, messageType, message) =>

{

    if (messageType == WebSocketMessageType.Text)

    {

        Console.WriteLine($"Received text message: {message}");

    }

    else if (messageType == WebSocketMessageType.Binary)

    {

        Console.WriteLine($"Received binary message: {message.Length} bytes");

    }

};


二、性能优化

2.1 内存管理优化


.NET 10 对 WebSocket 的内存管理进行了优化,减少了内存分配和垃圾回收的频率,

从而提高了 WebSocket 的性能。


缓冲区重用‌:WebSocket 客户端和服务器现在可以重用缓冲区,减少了内存分配的开销。

这对于处理大量消息的场景尤为重要,可以显著减少内存使用量和垃圾回收的频率。


异步操作优化‌:WebSocket 的异步操作(如 SendAsync 和 ReceiveAsync)现在更加高效,

减少了上下文切换和线程池调用的开销,从而提高了整体性能。


2.2 连接管理优化


.NET 10 对 WebSocket 的连接管理进行了优化,提高了连接的稳定性和可靠性。


心跳机制‌:WebSocket 客户端和服务器现在支持心跳机制,可以定期发送心跳消息来检测连

接的活跃性。如果连接长时间没有响应,可以自动关闭连接,从而避免了连接泄漏和资源浪费。


重连机制‌:WebSocket 客户端现在支持自动重连机制,可以在连接断开后自动尝试重新连接。

这对于需要长时间保持连接的场景尤为重要,可以显著提高应用的可用性。


三、安全性提升

3.1 SSL/TLS 支持增强


.NET 10 对 WebSocket 的 SSL/TLS 支持进行了增强,提供了更多的安全选项和配置灵活性。


多证书支持‌:WebSocket 服务器现在可以配置多个 SSL 证书,可以根据客户端请求的域名或

 IP 地址选择合适的证书进行验证。这对于需要支持多个域名的场景尤为重要。


自定义证书验证‌:WebSocket 客户端和服务器现在支持自定义证书验证逻辑,可以通过实现 

RemoteCertificateValidationCallback 来自定义证书验证过程。这使得开发者可以根据特定

的安全需求进行更灵活的配置。


3.2 身份验证和授权增强


.NET 10 对 WebSocket 的身份验证和授权进行了增强,提供了更多的安全选项和配置灵活性。


自定义身份验证‌:WebSocket 服务器现在支持自定义身份验证逻辑,可以通过实现

 AuthenticationHandler 来自定义身份验证过程。这使得开发者可以根据特定的安全

需求进行更灵活的配置。


角色授权‌:WebSocket 服务器现在支持基于角色的授权,可以根据用户的角色来限制访问权限。

这对于需要精细控制访问权限的场景尤为重要。


四、与其他技术的集成改进

4.1 ASP.NET Core 集成


.NET 10 对 WebSocket 与 ASP.NET Core 的集成进行了改进,提供了更便捷的 WebSocket 端点配置和中间件支持。


WebSocket 端点配置‌:ASP.NET Core 现在提供了更便捷的 WebSocket 端点配置方式,

可以通过 WebSocketOptions 来配置 WebSocket 的各种参数,如缓冲区大小、心跳间隔等。


中间件支持‌:ASP.NET Core 现在提供了更强大的 WebSocket 中间件支持,可以更灵活地

处理 WebSocket 请求和响应,如自定义握手过程、消息处理等。


4.2 SignalR 集成


.NET 10 对 WebSocket 与 SignalR 的集成进行了改进,提供了更高效的实时通信能力。


性能优化‌:SignalR 现在可以更高效地利用 WebSocket 进行实时通信,减少了消息传输的开销,提高了整体性能。


自定义协议支持‌:SignalR 现在支持自定义 WebSocket 协议,可以根据特定的应用需求进行更灵活的配置。


结语


.NET 10 中的 WebSocket 功能增强为开发者提供了更强大、更灵活的实时通信能力。通过引入新的 

API、优化性能、提升安全性以及改进与其他技术的集成,使得 WebSocket 在现代 Web 应用开发中

更加易用和高效。无论是需要实时数据交换的在线游戏、即时聊天,还是需要实时数据监控的应用,

都可以从 .NET 10 的 WebSocket 功能增强中受益。


澳五机器人 澳八机器人 河内机器人 加拿大机器人 花开月下机器人 朱雀机器人 速飞机器人 名爵机器人 飞天机器人 BV机器人 涂六飞单机器人 美猴王机器人 大富豪机器人 速讯机器人 五球助手 十球助手

相关文章

在Windows传统控制台(conhost.exe)中尝试显示U+2717(✗, ballot X)符号时,常出现方框问号的异常显示问题

在Windows传统控制台(conhost.exe)中尝试显示U+2717(✗, ballot X)符号时,常出现方框问号的异常显示问题。这一现象背后涉及字体支持、系统回退机制等多层面原因,以下是具体...

Claude Code 使用指南(五):企业级应用与团队协作

在之前四篇指南中,我们系统介绍了 Claude Code 的安装配置、基础使用、进阶技巧和实战应用。本篇将聚焦企业级场景,探讨如何将 Claude Code 从个人开发工具升级为团队协作引擎。通过合理...

解决 iOS 上 Swiper 滑动图片闪烁问题:原因分析与最有效的修复方式(一)

引言在移动端网页开发中,Swiper 作为一款功能强大且灵活的滑动组件库,广泛应用于图片轮播、内容滑动等场景。然而,许多开发者在 iOS 设备上使用 Swiper 时,都遇到了滑动过程中图片闪烁或白屏...

《INMS: Memory Sharing for Large Language Model based Agents》论文笔记(一):开启多智能体协作新范式

在大语言模型(LLM)蓬勃发展的当下,单智能体系统已在众多领域展现出强大能力,但面对复杂的多任务协作场景,其局限性日益凸显。《INMS: Memory Sharing for Large Langua...

人工智能之编程基础 Python 入门:第六章 基本数据类型(四)

引言:从中文思维到代码的桥梁在人工智能开发中,我们经常需要将自然语言描述转化为可执行的代码。如PandaCoder工具所演示的,当开发者用中文描述"用户管理服务"时,智能助手能自动...

Solon 不依赖 Java EE 是其最有价值的设计!

在当今快速发展的软件开发领域,框架的选择往往决定了项目的成败。Java EE(现为 Jakarta EE作为企业级应用的传统标准,曾长期占据主导地位。然而,随着微服务架构和云原生技术的兴起,传统 Ja...