.NET WebSocket 库 — 对比指南
面向 .NET 开发者的中立、有来源引用的 WebSocket 库调查(2026年):sgcWebSockets .NET、System.Net.WebSockets、ASP.NET Core SignalR、WebSocket-Sharp、Fleck 和 Watson WebSocket。每项功能声明均链接到项目官方文档。
面向 .NET 开发者的中立、有来源引用的 WebSocket 库调查(2026年):sgcWebSockets .NET、System.Net.WebSockets、ASP.NET Core SignalR、WebSocket-Sharp、Fleck 和 Watson WebSocket。每项功能声明均链接到项目官方文档。
每个库的一段摘要,并附有官方文档或代码库的链接。
eSeGeCe · 商业版
C# 组件套件,与 Delphi 产品一一对应。相同的 Tsgc* 类名,相同的协议覆盖范围:WebSocket 客户端和服务器(TCP 和 HTTP.SYS)、MQTT、AMQP、STOMP、WAMP、HTTP/2、OAuth2、JWT、AI/LLM 客户端(OpenAI、Anthropic、Gemini、DeepSeek、Grok、Ollama、Mistral、MCP)、WebRTC 服务器,以及 30+ 加密货币交易所和 SaaS API 集成。目标框架:.NET Framework 2.0–4.8.1、.NET Core 1.0–3.1、.NET 5/6/7/8/9 和 .NET Standard 1.6/2.0。
Microsoft · MIT(.NET 的一部分)
.NET 内置的低级 WebSocket API。为客户端提供 ClientWebSocket,并提供 ASP.NET Core、Kestrel 和 HttpListener 使用的服务器抽象 WebSocket 类。RFC 6455 帧格式和逐消息压缩(WebSocketDeflateOptions)是一等特性。
Microsoft · MIT(ASP.NET Core 的一部分)
Microsoft 的高级实时框架。基于 WebSocket、Server-Sent Events 和 Long Polling 构建(按此回退顺序);公开 hub RPC API 而非原始帧。支持 JSON 或 MessagePack hub 协议;可通过 Azure SignalR Service 或 Redis 后端扩展。
sta.blockhead · MIT
长期运行的开源 C# WebSocket 客户端和服务器。目标为 .NET Framework 3.5 及更高版本(以及 Mono),实现带逐消息压缩(无上下文接管)的 RFC 6455。GitHub 仓库没有标记发布版本——用户通常使用最新的 master 或固定到某个提交哈希。
Jason Staten / 社区 · MIT
仅服务器端的 C# WebSocket 库,不依赖 HttpListener 或 HTTP.SYS——在原始套接字上监听。没有客户端、没有 HTTP 服务器,也没有除 X509 证书路径之外的内置 TLS 终止。最新标记发布版本为 2016 年 10 月的 0.14.0。
Joel Christner · MIT
具有事件驱动 API 的异步 C# WebSocket 客户端和服务器。目标为 .NET Framework 4.8 和 .NET 7.0。该仓库于 2024 年 5 月归档,并注明已集成到 Watson Webserver 中。
勾选() 表示该项目文档记录了原生支持。横线(—) 表示该项目未原生提供。波浪号(~) 表示部分支持 / 通过插件 / 未明确文档记录——请参阅来源部分了解我们可以验证的内容。
| 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 帧。
当您需要在一个包中同时使用 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。
当您已使用 ASP.NET Core / Kestrel 进行托管且不想引入额外依赖时;当您需要端到端完全掌控的低级 API 时;当 WebSocket 是您唯一需要的协议时;或者当您在原始帧之上构建自己的协议时,选择 System.Net.WebSockets。
当服务器和客户端都是 .NET(或使用 JavaScript / Java / Python SignalR 客户端)时;当您偏好 RPC 编程模型(hub 和方法)而非原始 WebSocket 帧时;当您需要在受限网络下自动回退到 SSE / Long Polling 时;或者当您计划在 Azure SignalR Service 上扩展时,选择 ASP.NET Core SignalR。
当您需要在 .NET Framework 3.5 / Mono 目标上运行的宽松许可(MIT)WebSocket 客户端和服务器,并且愿意固定到某个提交哈希并将源代码引入您的构建时,选择 WebSocket-Sharp。
当您需要一个不依赖 HTTP.SYS、可在旧版 Windows 服务器(7 / 2008)上运行的小型 MIT 许可 WebSocket 服务器,并自行提供 TLS 证书时,选择 Fleck。适合嵌入式场景和小型服务。
当您已使用 Joel Christner 的 Watson Webserver / Watson TCP 系列并希望保持匹配的 API 风格时,选择 Watson WebSocket。新项目应考虑 Watson Webserver(活跃的后继者)或本页上的其他库。
从上述库切换时 API 和功能差异的简短说明。无意批评——仅是实用的映射关系。
System.Net.WebSockets 提供线协议;sgcWebSockets .NET 在此基础上增加了 MQTT / AMQP / STOMP / WAMP 子协议、HTTP/2、自动重连、看门狗、AI/LLM 和交易所 API 客户端,以及 WebRTC 服务器组件。如果您在 ClientWebSocket 外写了一个薄包装器,迁移主要是重命名加事件处理程序移植。
SignalR 在 WebSocket 上使用自己的帧协议。sgcWebSockets 实现了 SignalR 客户端线协议(TsgcWSAPI_SignalR 和 TsgcWSAPI_SignalRCore),因此使用 sgcWebSockets 构建的 Delphi 或 .NET 客户端可以与现有的 ASP.NET Core SignalR 服务器通信。如果您正在将完整的 SignalR 后端迁移到原始 WebSocket,则需要将 hub 方法调度重新设计为您自己的消息信封。
WebSocket-Sharp 的 WebSocket 客户端和 WebSocketServer 与 sgcWebSockets 的 TsgcWebSocketClient 和 TsgcWebSocketServer 密切对应。事件名称有所不同(两者都有 OnMessage;OnError 和 OnClose 具有相似的签名)。子协议(MQTT / AMQP / STOMP / WAMP)是 sgcWebSockets 独有的。
Fleck 仅支持服务器端。如果您的应用程序同时有 Fleck 服务器和单独的客户端库,sgcWebSockets .NET 将两者统一。Fleck 基于处理程序的 API(WebSocketServer.Start(socket => ...))映射到 sgcWebSockets 基于事件的 TsgcWebSocketServer,具有 OnMessage / OnConnect 处理程序。
Watson 客户端/服务器事件接口(MessageReceived、ClientConnected、ClientDisconnected)可以清晰地映射到 sgcWebSockets 的 OnMessage / OnConnect / OnDisconnect。子协议和 AI/LLM API 客户端是 sgcWebSockets 独有的。
上面矩阵中的每个单元格都可追溯到这些官方文档页面、代码库或发布说明之一。所有 URL 在撰写时均经过 HEAD 检查。