.NET WebSocket 库 — 对比指南

面向 .NET 开发者的中立、有来源引用的 WebSocket 库调查(2026年):sgcWebSockets .NET、System.Net.WebSockets、ASP.NET Core SignalR、WebSocket-Sharp、Fleck 和 Watson WebSocket。每项功能声明均链接到项目官方文档。

六大库供您选择

每个库的一段摘要,并附有官方文档或代码库的链接。

System.Net.WebSockets

Microsoft · MIT(.NET 的一部分)

.NET 内置的低级 WebSocket API。为客户端提供 ClientWebSocket,并提供 ASP.NET Core、Kestrel 和 HttpListener 使用的服务器抽象 WebSocket 类。RFC 6455 帧格式和逐消息压缩(WebSocketDeflateOptions)是一等特性。

官方页面

ASP.NET Core SignalR

Microsoft · MIT(ASP.NET Core 的一部分)

Microsoft 的高级实时框架。基于 WebSocket、Server-Sent Events 和 Long Polling 构建(按此回退顺序);公开 hub RPC API 而非原始帧。支持 JSON 或 MessagePack hub 协议;可通过 Azure SignalR Service 或 Redis 后端扩展。

官方页面

WebSocket-Sharp

sta.blockhead · MIT

长期运行的开源 C# WebSocket 客户端和服务器。目标为 .NET Framework 3.5 及更高版本(以及 Mono),实现带逐消息压缩(无上下文接管)的 RFC 6455。GitHub 仓库没有标记发布版本——用户通常使用最新的 master 或固定到某个提交哈希。

官方页面

Fleck

Jason Staten / 社区 · MIT

仅服务器端的 C# WebSocket 库,不依赖 HttpListener 或 HTTP.SYS——在原始套接字上监听。没有客户端、没有 HTTP 服务器,也没有除 X509 证书路径之外的内置 TLS 终止。最新标记发布版本为 2016 年 10 月的 0.14.0。

官方页面

Watson WebSocket

Joel Christner · MIT

具有事件驱动 API 的异步 C# WebSocket 客户端和服务器。目标为 .NET Framework 4.8 和 .NET 7.0。该仓库于 2024 年 5 月归档,并注明已集成到 Watson Webserver 中。

官方页面

功能并排对比

勾选() 表示该项目文档记录了原生支持。横线() 表示该项目未原生提供。波浪号(~) 表示部分支持 / 通过插件 / 未明确文档记录——请参阅来源部分了解我们可以验证的内容。

协议、传输、许可

16 行
Feature sgcWebSockets .NET System.Net.WebSockets ASP.NET Core SignalR WebSocket-Sharp Fleck Watson WebSocket
WebSocket 客户端 RFC 6455 客户端
WebSocket 服务器 RFC 6455 服务器
TLS 1.3 传输层支持 TLS 1.3 ~ ~
HTTP/2 客户端 原生 HTTP/2 客户端(RFC 7540 / 9113) ~
MQTT 内置 MQTT 3.1.1 / 5.0 客户端
AMQP 内置 AMQP 0.9.1 / 1.0 客户端
STOMP 内置 STOMP 1.0 / 1.2 客户端
WAMP 内置 WAMP v1 / v2 客户端
服务器推送 / 流式传输 长期推送或流式连接
自动重连 内置客户端自动重连 / 看门狗
per-message-deflate (RFC 7692) WebSocket 压缩扩展 ~ ~
多平台 Windows / macOS / Linux / iOS / Android ~
允许商业使用 许可证允许闭源商业使用
源代码可用 库源代码对开发者可见
积极维护 最近 12-18 个月内有发布或标记活动 ~
许可证模型 许可证类型 商业版 MIT (part of .NET) MIT (part of ASP.NET Core) MIT MIT MIT
文档中的原生支持 未原生提供 ~ 部分 / 通过插件 / 未验证

各库的适用场景

这里的每个库都有真实的受众。正确的选择取决于您的运行时目标、协议广度,以及您是需要 RPC 风格的 hub API 还是原始 WebSocket 帧。

选择 sgcWebSockets .NET

当您需要在一个包中同时使用 WebSocket、MQTT、AMQP、STOMP、WAMP、HTTP/2 和 AI/LLM 客户端时;当您的目标是新库已放弃的旧运行时(.NET Framework 2.0+、.NET Core 1.0)时;当您希望 Delphi 和 .NET 项目共用相同的 API 接口时;或者当您特别需要 .NET 上的 WebRTC 服务器组件(信令、ICE、TURN)时,选择 sgcWebSockets .NET。

选择 System.Net.WebSockets

当您已使用 ASP.NET Core / Kestrel 进行托管且不想引入额外依赖时;当您需要端到端完全掌控的低级 API 时;当 WebSocket 是您唯一需要的协议时;或者当您在原始帧之上构建自己的协议时,选择 System.Net.WebSockets。

选择 ASP.NET Core SignalR

当服务器和客户端都是 .NET(或使用 JavaScript / Java / Python SignalR 客户端)时;当您偏好 RPC 编程模型(hub 和方法)而非原始 WebSocket 帧时;当您需要在受限网络下自动回退到 SSE / Long Polling 时;或者当您计划在 Azure SignalR Service 上扩展时,选择 ASP.NET Core SignalR。

选择 WebSocket-Sharp

当您需要在 .NET Framework 3.5 / Mono 目标上运行的宽松许可(MIT)WebSocket 客户端和服务器,并且愿意固定到某个提交哈希并将源代码引入您的构建时,选择 WebSocket-Sharp。

选择 Fleck

当您需要一个不依赖 HTTP.SYS、可在旧版 Windows 服务器(7 / 2008)上运行的小型 MIT 许可 WebSocket 服务器,并自行提供 TLS 证书时,选择 Fleck。适合嵌入式场景和小型服务。

选择 Watson WebSocket

当您已使用 Joel Christner 的 Watson Webserver / Watson TCP 系列并希望保持匹配的 API 风格时,选择 Watson WebSocket。新项目应考虑 Watson Webserver(活跃的后继者)或本页上的其他库。

迁移到 sgcWebSockets .NET — 差异说明

从上述库切换时 API 和功能差异的简短说明。无意批评——仅是实用的映射关系。

从 System.Net.WebSockets 迁移

System.Net.WebSockets 提供线协议;sgcWebSockets .NET 在此基础上增加了 MQTT / AMQP / STOMP / WAMP 子协议、HTTP/2、自动重连、看门狗、AI/LLM 和交易所 API 客户端,以及 WebRTC 服务器组件。如果您在 ClientWebSocket 外写了一个薄包装器,迁移主要是重命名加事件处理程序移植。

从 ASP.NET Core SignalR 迁移

SignalR 在 WebSocket 上使用自己的帧协议。sgcWebSockets 实现了 SignalR 客户端线协议(TsgcWSAPI_SignalRTsgcWSAPI_SignalRCore),因此使用 sgcWebSockets 构建的 Delphi 或 .NET 客户端可以与现有的 ASP.NET Core SignalR 服务器通信。如果您正在将完整的 SignalR 后端迁移到原始 WebSocket,则需要将 hub 方法调度重新设计为您自己的消息信封。

从 WebSocket-Sharp 迁移

WebSocket-Sharp 的 WebSocket 客户端和 WebSocketServer 与 sgcWebSockets 的 TsgcWebSocketClientTsgcWebSocketServer 密切对应。事件名称有所不同(两者都有 OnMessageOnErrorOnClose 具有相似的签名)。子协议(MQTT / AMQP / STOMP / WAMP)是 sgcWebSockets 独有的。

从 Fleck 迁移

Fleck 仅支持服务器端。如果您的应用程序同时有 Fleck 服务器和单独的客户端库,sgcWebSockets .NET 将两者统一。Fleck 基于处理程序的 API(WebSocketServer.Start(socket => ...))映射到 sgcWebSockets 基于事件的 TsgcWebSocketServer,具有 OnMessage / OnConnect 处理程序。

从 Watson WebSocket 迁移

Watson 客户端/服务器事件接口(MessageReceivedClientConnectedClientDisconnected)可以清晰地映射到 sgcWebSockets 的 OnMessage / OnConnect / OnDisconnect。子协议和 AI/LLM API 客户端是 sgcWebSockets 独有的。

每项声明均有链接

上面矩阵中的每个单元格都可追溯到这些官方文档页面、代码库或发布说明之一。所有 URL 在撰写时均经过 HEAD 检查。

来源URL
sgcWebSockets — 产品页面https://www.esegece.com/products/websockets/
sgcWebSockets — .NET 功能矩阵https://www.esegece.com/products/websockets/features/feature-matrix-net/
RFC 6455 — WebSocket 协议https://datatracker.ietf.org/doc/html/rfc6455
RFC 7692 — WebSocket 压缩扩展(逐消息压缩)https://datatracker.ietf.org/doc/html/rfc7692
System.Net.WebSockets — 命名空间文档https://learn.microsoft.com/en-us/dotnet/api/system.net.websockets
ClientWebSocket — .NET API 参考https://learn.microsoft.com/en-us/dotnet/api/system.net.websockets.clientwebsocket
WebSocketDeflateOptions — .NET 逐消息压缩支持https://learn.microsoft.com/en-us/dotnet/api/system.net.websockets.websocketdeflateoptions
ASP.NET Core SignalR — 概览https://learn.microsoft.com/en-us/aspnet/core/signalr/introduction
SignalR 代码库(dotnet/aspnetcore)https://github.com/dotnet/aspnetcore
WebSocket-Sharp — GitHub 代码库https://github.com/sta/websocket-sharp
Fleck — GitHub 代码库https://github.com/statianzo/Fleck
Fleck — 发布版本(2016 年 0.14.0)https://github.com/statianzo/Fleck/releases
Watson WebSocket — GitHub 代码库(已归档)https://github.com/jchristn/WatsonWebsocket

试用 sgcWebSockets .NET

下载免费社区版,在您自己的应用程序上对 sgcWebSockets .NET 与您当前的库进行基准测试。