本指南的意义
WebSocket 不再是小众传输。交易仪表板、聊天后端、多人游戏、IoT 控制平面、AI 流式响应、基于浏览器的管理控制台——几乎所有现代交互式应用程序都至少打开一个 WebSocket。在 2026 年问"我应该使用哪个库?"的 Delphi 开发者面临的领域比他们想象的要小:并非每个经典的 Delphi 网络包都赶上了 RFC 6455,而且其中一些已经赶上的针对的是非常具体的小众市场。
本指南调查了截至 2026 年的现实选项——sgcWebSockets、Indy、TMS FNC WX、mORMot、Synapse——并在末尾给出决策矩阵。在声明依赖于供应商当前版本的地方,本文描述撰写时的情况;在做决定之前,始终对照供应商的最新更改日志确认细节。
竞争者
sgcWebSockets (eSeGeCe)
专注于 WebSocket 和更广泛的现代协议家族(HTTP/2、HTTP/3、MQTT、AMQP、STOMP、SSE、WAMP、WebRTC、IoT、AI API)的商业库。完整 RFC 6455、per-message deflate、子协议、通道、广播辅助方法、WatchDog 自动重连、IOCP 服务器扩展、JavaScript 客户端镜像、.NET 端口。用于非商业用途的免费版;四个付费版本。Delphi 7 至 13,加上 C++Builder 和 .NET。
Indy(原始)
随 Delphi 一起发布的原始 Indy 不包含原生 WebSocket 客户端或服务器。存在几个社区附加组件(在 GitHub 上搜索"Indy WebSocket"),但截至撰写本文时,没有一个是官方 IndyProject 发行版的一部分。如果您直接在 Indy 之上构建 WebSocket,您实际上是自己编写帧器。免费,包装在盒中。
TMS FNC WX(以前的 TMS WEB Core / FNC WebSocket)
TMS Software 作为 FNC 家族的一部分提供跨框架 WebSocket 组件(TTMSFNCWebSocketClient 以及通过 TMS XData / TMS Sparkle 的服务器端)。它在 VCL、FMX、LCL 和 TMS WEB Core 上工作。客户端是稳固的;服务器端主要通过 TMS XData / Sparkle 栈作为这些产品的一项功能提供。商业,按开发者订阅定价。Delphi 10.x 及更新版本。
mORMot 2
Synopse(Arnaud Bouchez)的开源全栈框架。包括一个与其 SOA/ORM/REST 基础设施紧密集成的 WebSocket 客户端和服务器。mORMot 的 WebSocket 成熟、快速,支持二进制帧和 per-message deflate,并广泛用于高规模服务的生产中。权衡是 mORMot 是有主张的——仅使用其 WebSocket 层是可能的,但当您采用更广泛的框架时自然契合。开源(MPL/GPL/LGPL 三许可),Delphi 7 及以上,加上 FreePascal。
Synapse
经典的开源 Pascal 网络库。截至撰写本文时,原始 Synapse 不包含 WebSocket 实现。存在一些在 Synapse 之上构建的第三方 WebSocket 层,但它们未维护或是单作者项目。免费。
功能矩阵
| 功能 | sgcWebSockets | Indy(原始) | TMS FNC WX | mORMot 2 | Synapse |
|---|---|---|---|---|---|
| WebSocket 客户端 | 是 | 否 | 是 | 是 | 否 |
| WebSocket 服务器 | 是 | 否 | 通过 TMS XData/Sparkle | 是 | 否 |
| RFC 6455(帧、掩码、控制帧) | 是 | 不适用 | 是 | 是 | 不适用 |
| Per-message deflate (RFC 7692) | 是 | 不适用 | 部分 | 是 | 不适用 |
| 子协议/通道/广播 | 是,内置 | 不适用 | 手动 | 手动 | 不适用 |
| 自动重连/WatchDog | 是 | 不适用 | 手动 | 手动 | 不适用 |
| 基于 TLS 的 WebSocket (wss://) | 是(OpenSSL、SChannel、BoringSSL) | 不适用 | 是 | 是 | 不适用 |
| WebSocket-MQTT / STOMP / WAMP 子协议 | 是 | 不适用 | 否 | 有限 | 不适用 |
| HTTP/2、HTTP/3 | 是 | 否 | 否 | 有限 | 否 |
| IOCP / epoll 服务器扩展 | 是(Windows IOCP、Linux epoll) | 每连接一个线程 | 取决于主机服务器 | 是 | 不适用 |
| JavaScript 客户端镜像 | 是(提供 JS 库) | 不适用 | 是(TMS WEB Core 集成) | 手动 | 不适用 |
| .NET 端口 | 是(相同 API) | 不适用 | 否 | 否 | 不适用 |
| Delphi 版本 | D7 - D13 | D7 - D13 | D10.x - D13 | D7 - D13, FPC | D7 - D13, FPC |
| 许可 | 商业(存在免费版) | 免费,MIT 风格 | 商业 | 开源三许可 | 免费 |
| 供应商支持 | 包含在付费版本中 | 社区 (IndyProject) | 包含在订阅中 | 通过 Synopse 的商业支持 | 社区/单作者 |
| 积极维护 | 每月发布 | 缓慢但稳定 | 定期 | 非常活跃 | 缓慢 |
按场景选择
场景 1:连接到第三方 WebSocket API 的 VCL 桌面应用
您需要一个连接到 wss://、发送 JSON、接收 JSON、断开时重连、处理 TLS 的客户端。最短的路径是 sgcWebSockets(放置组件、设置 URL、设置 WatchDog.Attempts、完成)或者如果您已经获得 FNC 包许可,则 TMS FNC WX。Indy 和 Synapse 需要您自己编写帧器,这要正确处理 RFC 6455 边缘情况需要大量工作。
场景 2:为数百个客户端构建 WebSocket 服务器
如果您想要一个独立的服务器组件,在同一端口提供带通道和广播的 HTTP 和 WebSocket,sgcWebSockets 是自然选择。如果您已经在 mORMot 框架内构建 SOA/REST 服务,mORMot 2 是自然选择——其 WebSocket 层与栈的其余部分集成,并在规模上经过实战考验。
场景 3:数万个并发连接
sgcWebSockets(Windows 上的 IOCP,Linux 上的 epoll)和 mORMot 2 都已在该规模的生产中部署。原始 Indy 的每连接一个线程模型不太可能在没有重大架构工作的情况下跟上。TMS FNC WX 的扩展取决于所选的主机服务器(XData/Sparkle)。
场景 4:在 Pascal 全栈框架(REST、ORM、SOA)中的 WebSocket
mORMot 2。这就是 mORMot 的用途。孤立地仅采用 WebSocket 层是可能的,但当您接受更广泛的框架时,您将获得最大价值。
场景 5:跨框架客户端(VCL、FMX、LCL、TMS WEB Core)
TMS FNC WX 正是为这种情况设计的——一个 API 跨所有四个。sgcWebSockets 涵盖 VCL、FMX 和 C++Builder 加上 .NET 端口,但不针对 Lazarus/FPC。
场景 6:需要 WebSocket 加上 MQTT、AMQP、WebRTC、HTTP/2、AI API
sgcWebSockets 是本次比较中唯一一个在单一产品和单一组件模型下提供所有上述功能的库。如果您的项目从"只是一个 WebSocket 客户端"走向"一个完整的实时栈",提前合并通常比稍后将几个库粘合在一起便宜。
场景 7:预算紧张、仅限开源、业余项目
mORMot 2(开源)免费为您提供严肃的 WebSocket 实现。sgcWebSockets 的免费版是非商业用途的选项。带社区 WebSocket 附加组件的 Indy 在技术上是可能的,但预计您将自己阅读相关 RFC。
决策矩阵
| 最重要的是什么 | 推荐选择 |
|---|---|
| 最快获得可工作客户端 + 供应商支持 | sgcWebSockets |
| 开源全栈框架 | mORMot 2 |
| 跨框架 (VCL/FMX/LCL/WEB Core) | TMS FNC WX |
| 最高并发连接,商业 | sgcWebSockets |
| 最高并发连接,开源 | mORMot 2 |
| 一个产品涵盖 WebSocket + MQTT + HTTP/2 + WebRTC + AI | sgcWebSockets |
| 免费/无承诺业余项目 | mORMot 2 或 sgcWebSockets 免费版 |
| 已经在 TMS XData / Sparkle 项目内 | TMS FNC WX |
| 已经在 mORMot 项目内 | mORMot 2 |
承诺前检查清单
- Delphi 版本——确认供应商在其兼容性矩阵上列出您的确切版本(D7/D10.4/D11/D12/D13)。
- RFC 6455 合规性——检查该库是否通过 Autobahn WebSocket 测试套件,或至少正确处理分片、分片期间的控制帧和 UTF-8 验证。
- TLS 提供程序——OpenSSL 最常见;如果您无法发布 OpenSSL DLL,SChannel 很重要;如果您需要 QUIC,BoringSSL/ngtcp2 很重要。
- 重连语义——自动重连、指数退避、ping/pong 保持活动应该是配置,而不是您的代码。
- 服务器扩展模型——IOCP/epoll 用于数万个连接;每连接一个线程适用于低数千。
- 许可兼容性——三许可 (mORMot)、商业订阅 (TMS)、按版本商业 (sgcWebSockets)、免费 (Indy/Synapse)。
- 维护信号——查看最近 12 个月的更改日志。活跃的库至少每季度发布一些东西。
结束思考
2026 年的 Delphi WebSocket 格局比乍一看更健康。对于快速客户端,sgcWebSockets 让您几分钟内工作起来。对于开源全栈项目,mORMot 2 难以击败。对于跨框架 GUI 客户端,TMS FNC WX 是自然契合。原始 Indy 和 Synapse 因其经典互联网协议而保持有价值,但都不拥有 WebSocket。正确的选择取决于您的项目在"单个端点"到"完整实时平台"的频谱上的位置——选择与今天的需求以及您期望项目在两年内所处位置都匹配的库。