为 Delphi 选择 WebSocket 库——2026 年买家指南

· 评测

本指南的意义

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 - D13D7 - D13D10.x - D13D7 - D13, FPCD7 - 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 + AIsgcWebSockets
免费/无承诺业余项目mORMot 2 或 sgcWebSockets 免费版
已经在 TMS XData / Sparkle 项目内TMS FNC WX
已经在 mORMot 项目内mORMot 2

承诺前检查清单

结束思考

2026 年的 Delphi WebSocket 格局比乍一看更健康。对于快速客户端,sgcWebSockets 让您几分钟内工作起来。对于开源全栈项目,mORMot 2 难以击败。对于跨框架 GUI 客户端,TMS FNC WX 是自然契合。原始 Indy 和 Synapse 因其经典互联网协议而保持有价值,但都不拥有 WebSocket。正确的选择取决于您的项目在"单个端点"到"完整实时平台"的频谱上的位置——选择与今天的需求以及您期望项目在两年内所处位置都匹配的库。