Delphi & C++ Builder WebSocket 库 — 对比指南

面向 Delphi 和 C++ Builder 开发者的中立、有来源引用的 WebSocket 库调查(2026年):sgcWebSockets、Indy、ICS、TMS FNC WebSocket、mORMot 2 和独立 MQTT 库。每项功能声明均链接到项目官方文档。

开发者实际使用的六大库

每个库的一段摘要,并附有官方文档链接。详细对比请见下方矩阵。

Indy (Internet Direct)

Indy Working Group / Remy Lebeau · BSD / MPL (open source)

开源 TCP/UDP/原始套接字库,随最新 RAD Studio 一同提供。包含 120 多个高级协议客户端和服务器(HTTP、SMTP、POP3、IMAP、FTP、NNTP、IRC 等),但不包含原生 WebSocket 客户端或服务器——用户通常在 TIdHTTP / TIdHTTPServer 之上添加第三方 WebSocket 插件。

官方页面

ICS (Internet Component Suite)

François Piette / Magenta Systems Ltd · Free, source-available

由 François Piette 开发的开源 Delphi / C++ Builder 网络库。ICS V9.0 新增了 WebSocket 支持,以 TSslWebSocketCli(位于 OverbyteIcsWebSocketCli)和服务器类 THttpWSSrvConn 的形式构建于现有 ICS Web 服务器之上。

官方页面

TMS FNC WebSocket / TMS Sparkle

TMS Software · Commercial

TMS Software 提供两款相关产品。TMS Sparkle 是跨平台 HTTP 客户端/服务器框架(TMS XData 和 TMS RemoteDB 内部也使用)。TMS FNC WebSocket 是实现 RFC 6455 的独立 VCL + FireMonkey WebSocket 客户端和服务器组件。

官方页面

mORMot 2

Arnaud Bouchez / Synopse · MPL / GPL / LGPL (open source)

开源 Object Pascal SOA / ORM / MVC 框架,具有异步 HTTP 和 WebSocket 服务器、REST/JSON、OpenAPI / Swagger、LDAP、DNS、ACME 以及加密原语。Delphi 服务器单元仅支持 Windows;FPC(Free Pascal)可为 Linux、BSD 和 macOS 构建相同的服务器代码。所有平台均支持移动客户端。

官方页面

Stand-alone MQTT-only libraries

Various community authors · Varies (typically MIT / BSD / Apache)

GitHub 上发布了许多 Delphi 专用 MQTT 客户端。它们通常仅涵盖 MQTT 3.1.1 客户端,不包含 MQTT 5.0 服务器、AMQP、STOMP 或 WAMP,由个人作者维护。

官方页面

功能并排对比

勾号()表示项目文档中有原生支持记录。破折号()表示项目未原生提供此功能。波浪号(~)表示部分支持 / 通过插件实现 / 未明确记录——详见来源章节中我们可验证的内容。

协议、传输与许可证

16 行
功能 sgcWebSockets Indy (Internet Direct) ICS (Internet Component Suite) TMS FNC WebSocket / TMS Sparkle mORMot 2 Stand-alone MQTT-only libraries
WebSocket 客户端 RFC 6455 客户端 ~
WebSocket 服务器 RFC 6455 服务器 ~
TLS 1.3 所提供传输层支持 TLS 1.3 ~ ~
HTTP/2 Client 原生 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 个月内有发布或标记活动 ~ ~
许可证模型 许可证类型 Commercial BSD / MPL (open source) Free, source-available Commercial MPL / GPL / LGPL (open source) Varies (typically MIT / BSD / Apache)
文档中的原生支持 未原生提供 ~ 部分 / 通过插件 / 未验证

各库的适用场景

这里列出的每个库都有其真实用户群体。正确的选择取决于您所需的协议广度、许可证偏好以及现有的依赖关系。

选择 sgcWebSockets

当您需要 WebSocket 加消息协议(MQTT、AMQP、STOMP、WAMP)、HTTP/2 和 AI/LLM 客户端,且希望通过单一商业许可证获取一套组件、广泛支持 Delphi 7–13 及 C++ Builder、并面向 macOS、iOS、Android 和 Linux 的 FireMonkey 目标平台时,请选择 sgcWebSockets。

选择 Indy(Internet Direct)

当 WebSocket 本身不是需求时请选择 Indy——例如,当您需要一个宽松许可证的 TCP/UDP 工具包,提供成熟的 HTTP、SMTP、POP3、IMAP、FTP 和 NNTP 支持,或者当您想用自己的 WebSocket 升级处理程序扩展现有的 TIdHTTPServer 时。Indy 随 RAD Studio 一同提供,因此不会增加您的依赖项。

选择 ICS(Internet Component Suite)

当您需要一个带有 WebSocket 客户端和服务器的开源 Delphi 网络套件、基于 OpenSSL 3.x 的现代 TLS 1.3(包括 V9.6 中的后量子密码学),并且熟悉通过现有 ICS Web 服务器配置路由时,请选择 ICS。ICS 是一个长期版本,跟踪积极维护的 OpenSSL 版本。

选择 TMS FNC WebSocket / TMS Sparkle

当 WebSocket 是您在 VCL 和 FireMonkey 上唯一需要的网络协议时、当您已授权使用其他 TMS FNC 组件(可视和非可视 API 风格保持一致)时,或当您特别需要 FNC 跨框架方案(VCL 和 FMX 共用一套代码库)时,请选择 TMS FNC WebSocket。若需要 HTTP 和 HTTPS 服务托管,TMS Sparkle 与 TMS XData 配合使用。

选择 mORMot 2

当您需要一个 MPL/GPL/LGPL 许可的 Object Pascal 开源全栈框架(ORM、SOA、REST、WebSocket、OpenAPI)、服务器在 FPC 下的 Linux 上运行,或者需要一个跨越数据库、业务逻辑和 WebSocket 传输层的单一框架时,请选择 mORMot 2。

选择独立 MQTT 专用库

当 MQTT 是您唯一需要的协议、项目必须仅依赖宽松许可证的代码,并且您希望阅读每一行传输协议实现时,请选择独立 MQTT 专用库。使用前请审查所选项目的提交历史——不同作者的活跃程度差异很大。

迁移到 sgcWebSockets — 差异说明

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

从 Indy(Internet Direct)迁移

Indy 提供原始 HTTP 和 TCP 管道;sgcWebSockets 内置了 WebSocket 帧处理、ping/pong、自动重连、子协议(MQTT/AMQP/STOMP/WAMP)和 per-message-deflate。如果您目前有基于 Indy 的 HTTP 服务器,sgcWebSockets 提供独立的 TsgcWebSocketHTTPServer 而非 Indy 插件——现有 HTTP 路由需要在 sgc 服务器下重新实现,或在不同端口上并行运行两者。

从 ICS(Internet Component Suite)迁移

两个库均提供 WebSocket 客户端和基于 HTTP 的 WebSocket 服务器。命名消息协议(MQTT、AMQP、STOMP、WAMP)以及 AI/LLM 和交易所 API 客户端是 sgcWebSockets 独有的。如果您目前运行带有 WebSocket 路由的 ICS Web 服务器,sgcWebSockets 提供 TsgcWebSocketHTTPServer 作为即插即用的 HTTP+WS 主机,但路由注册 API 有所不同。

从 TMS FNC WebSocket / TMS Sparkle 迁移

sgcWebSockets 和 TMS FNC WebSocket 均实现了 RFC 6455 客户端和服务器。通过替换组件类并重新连接事件即可完成迁移。构建于其上的协议层(MQTT、AMQP、STOMP、WAMP)、HTTP/2 客户端和服务器以及 30 多个第三方 API 集成是 sgcWebSockets 独有的。如果您单独使用 TMS MQTT,sgcWebSockets 已将 MQTT 捆绑到同一套件中。

从 mORMot 2 迁移

mORMot 2 将 WebSocket 封装在其 SOA 层内;sgcWebSockets 提供独立的 WebSocket / HTTP/2 / MQTT / AMQP / STOMP / WAMP 组件,可放入任何 Delphi 项目。如果您的应用程序使用 mORMot 2 的 ORM 和 SOA 功能,切换到 sgcWebSockets 意味着需要重新实现 SOA 层;如果您仅将 mORMot 2 用于 WebSocket 传输,sgcWebSockets 是更直接的一对一替换。

从独立 MQTT 专用库迁移

如果您目前使用独立 MQTT 专用库,并开始添加 WebSocket、HTTP/2、AMQP 或 AI/LLM API 客户端,sgcWebSockets 将所有这些整合到一个套件中,提供单一许可证和统一的更新渠道。

每项声明均有链接

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

来源URL
sgcWebSockets — 产品页面https://www.esegece.com/products/websockets/
sgcWebSockets — Delphi 功能矩阵https://www.esegece.com/products/websockets/features/feature-matrix-delphi/
Indy — 项目主页(indyproject.org)https://www.indyproject.org/
Indy — GitHub 仓库(IndySockets/Indy)https://github.com/IndySockets/Indy
Indy — 发布版本(最新标记 10.6.3.14)https://github.com/IndySockets/Indy/releases
ICS — V9.0 发布说明(引入 WebSocket 支持)https://wiki.overbyte.eu/wiki/index.php/ICS_V9.0
ICS — V9.6 发布说明(TLS 1.3 / 后量子密码)https://wiki.overbyte.eu/wiki/index.php/ICS_V9.6
ICS — 下载页面(最新稳定版)https://wiki.overbyte.eu/wiki/index.php/ICS_Download
TMS Sparkle — 产品页面https://www.tmssoftware.com/site/sparkle.asp
TMS FNC WebSocket — 产品页面https://www.tmssoftware.com/site/tmsfncwebsocket.asp
mORMot 2 — GitHub 仓库(synopse/mORMot2)https://github.com/synopse/mORMot2
mORMot 2 — README(协议列表、支持目标)https://github.com/synopse/mORMot2/blob/master/README.md
mORMot 2 — 发布版本(v2.4 稳定版)https://github.com/synopse/mORMot2/releases
Synopse 论坛(Object Pascal SOA / ORM)https://synopse.info/
GitHub 主题:delphi-mqtt(社区单用途 MQTT 客户端)https://github.com/topics/delphi-mqtt
RFC 6455 — WebSocket 协议https://datatracker.ietf.org/doc/html/rfc6455
RFC 7692 — WebSocket 压缩扩展(per-message-deflate)https://datatracker.ietf.org/doc/html/rfc7692

试用 sgcWebSockets

下载免费试用版,在您自己的应用程序中对比测试 sgcWebSockets 与当前库的性能。