另一个长期存在的 Delphi 网络库
对于在 2026 年寻找网络库的 Delphi 开发者而言,往往会出现三个名字:Indy、Overbyte ICS(François Piette 的 Internet Component Suite)和 sgcWebSockets。ICS 的历史几乎与 Indy 一样久远,并且拥有忠实的追随者,尤其是那些欣赏其非阻塞、基于消息泵架构的开发者。sgcWebSockets 是专注于现代协议的较新商业库。
本文对两者进行正面比较:功能覆盖、WebSocket 支持、HTTP/2 和 HTTP/3、许可、开发者体验和商业支持。在比较取决于特定 ICS 版本的地方,声明基于撰写本文时公开记录的 v9 系列——如果您需要确切的功能确认,请查看当前的 ICS 更改日志。
起源和设计理念
ICS 在 1990 年代作为一组异步、事件驱动的 WinSock 包装器开始。经典的 ICS 组件(TWSocket、THttpCli、TSslHttpServer)使用非阻塞消息泵模型:每个套接字操作发布 Windows 消息,您在事件处理程序中响应。该模型与 Delphi VCL 完美契合——无线程、无同步原语、在主线程上运行。ICS 后来添加了一个线程池 HTTP 服务器(TSslHttpAppSrv),以获得更高的并发性。
sgcWebSockets 围绕一个不同的问题设计:长期双向连接(WebSocket、MQTT、SSE、gRPC 风格的流)和现代传输栈(HTTP/2、基于 QUIC 的 HTTP/3)。它使用基于 IOCP 的 Windows 服务器进行扩展,使用事件驱动的客户端模型实现低延迟消息传递。它还包装 Indy 和 ICS 作为备选 HTTP 后端,因此您可以选择适合您环境的传输。
功能逐项比较
| 功能 | Overbyte ICS(撰写时为 v9) | sgcWebSockets |
|---|---|---|
| HTTP/1.1 客户端 | 是(THttpCli、TSslHttpCli) | 是,多个后端 |
| HTTP/1.1 服务器 | 是(TSslHttpAppSrv) | 是 |
| WebSocket 客户端 | 是(自 v8 起) | 是,完整 RFC 6455 |
| WebSocket 服务器 | 是(自 v8 起) | 是,子协议、permessage-deflate、通道 |
| HTTP/2 | 有限/非一流功能 | 是,完整 HPACK + 帧层 |
| HTTP/3 / QUIC | 否 | 是(基于 msquic) |
| MQTT 3.1.1 / 5.0 | 无原生代理,仅基本客户端 | 完整客户端 + 代理,两个版本 |
| AMQP 1.0 / 0.9.1 | 否 | 是 |
| STOMP、SSE、WAMP | SSE 基本,其他否 | 全部支持 |
| WebRTC / STUN / TURN / DTLS-SRTP | 否 | 是 |
| CoAP、AWS IoT、Azure IoT | 否 | 是 |
| SMTP / POP3 / IMAP / FTP / NNTP | 是,成熟的实现 | 否(使用 Indy 或 ICS) |
| OpenSSL 绑定 | 是,非常新 | 是,加上 SChannel 和 BoringSSL |
| 30 多个 REST API 包装器(OpenAI、Anthropic、AWS、Azure、交易所) | 否 | 是 |
| 许可 | 免费,mozilla 风格 | 商业,提供免费版 |
| Delphi 版本 | D7 至 D13 | D7 至 D13 |
| 维护 | 积极,供应商主导(Magenta Systems) | 积极,供应商主导,每月发布 |
| 商业支持 | 可选付费支持合同 | 包含在付费版本中 |
WebSocket 支持
ICS 在 v8 中添加了 WebSocket 组件(TIcsWebSocketClient,服务器端通过带 WebSocket 处理程序的 TSslHttpAppSrv)。它们涵盖 RFC 6455 和 TLS,这对于许多用例已足够。ICS 尚未开箱即用提供的是默认的 per-message deflate、命名通道/广播组、自动重连 WatchDog、JavaScript 客户端粘合代码或基于 WebSocket 之上的内置协议(WebSocket-MQTT、WebSocket-STOMP、WAMP)。
sgcWebSockets 将 WebSocket 视为宇宙的中心。服务器在同一端口多路复用 HTTP 和 WebSocket,附带通道和广播辅助方法,包括镜像 Delphi API 的 JavaScript 客户端,并添加 WatchDog 自动重连、心跳 ping/pong、消息队列以及 LB 风格的负载均衡器组件。如果您离不开 WebSocket,开发者体验明显更丰富。
HTTP/2 和 HTTP/3
这是差距最大的领域。截至撰写本文时,ICS 在 v9 发行说明中并未将 HTTP/2 列为一流功能——一些实验性工作已在公共邮件列表上讨论过,但 ICS 应用程序内部推荐的 HTTP/2 路径是使用单独的库。
sgcWebSockets 自 2018 年起就提供了完整的 HTTP/2 实现,包括 HPACK 标头压缩算法、帧多路复用、服务器推送和 ALPN 协商。Apple Push Notification 客户端、Google FCM 客户端以及您构建的任何 HTTP/2 服务器端点都使用相同的代码路径。HTTP/3 over QUIC 在 2023 年使用 Microsoft 的 Windows msquic 库和 Linux 的 ngtcp2 添加。对于需要前沿传输支持的应用程序,这是一个有意义的差异点。
经典互联网协议
ICS 在这里明显胜出。SMTP、POP3、IMAP、FTP、NNTP、DNS 甚至 HTTP 代理服务器都已包含并得到良好维护。如果您正在构建电子邮件客户端、FTP 前端或 SMTP 中继,ICS 是比 sgcWebSockets(根本不提供这些协议)更好的起点。
一个常见的组合是在同一产品中使用 ICS 处理邮件/FTP 层,使用 sgcWebSockets 处理 WebSocket / HTTP/2 / MQTT 层。两个库可以愉快地共存,因为它们具有不同的单元命名空间。
SSL / TLS
两个库都认真对待 TLS。ICS 以极快的速度跟踪新的 OpenSSL 版本而闻名——新的 OpenSSL 3.x 次要版本通常在几天内得到支持。sgcWebSockets 也跟踪 OpenSSL,并额外支持 Windows SChannel 和 BoringSSL,加上其自己的端到端加密层,用于在 TLS 之上的应用级机密性。
开发者体验
ICS 使用事件驱动、消息泵风格的 API,在 VCL 窗体内非常自然——您放置一个组件,连接 OnDataAvailable 或 OnRequestDone,Windows 消息驱动流程。它对线程要求低、易于调试,并且对经典 VCL 开发是惯用的。缺点是扩展到单个消息泵之外需要线程池服务器变体或显式多实例设计。
sgcWebSockets 遵循 Indy 和现代 REST 库使用的较新组件约定:带强类型选项子对象的组件(HeartBeat、WatchDog、TLSOptions 等)、事件驱动的回调和底层工作线程。IOCP 服务器传输可扩展到数万个并发连接,无需更改用户代码。
许可和定价
ICS 在 Mozilla 风格的许可下对商业和非商业用途均免费。可从 Magenta Systems 获得可选的商业支持合同。sgcWebSockets 是商业的,提供用于非商业用途的免费版和四个付费版本(Standard、Professional、Enterprise、All-Access)。付费版本包括源代码、每月更新和直接供应商支持。
决策矩阵
| 如果您需要… | 最佳选择 |
|---|---|
| SMTP、POP3、IMAP、FTP、NNTP 客户端 | ICS |
| 无线程的微型单窗体 HTTP 获取器 | ICS |
| 前沿 OpenSSL 跟踪 | ICS(sgc 非常接近) |
| 带通道、WatchDog、JS 客户端的 WebSocket 客户端/服务器 | sgcWebSockets |
| HTTP/2 客户端或服务器、Apple Push、FCM | sgcWebSockets |
| HTTP/3 / QUIC | sgcWebSockets |
| MQTT 5 代理、AMQP 1.0、WAMP、STOMP | sgcWebSockets |
| WebRTC、STUN、TURN、IoT、CoAP | sgcWebSockets |
| 现成的 OpenAI / Anthropic / 云 API 组件 | sgcWebSockets |
| 商业供应商支持合同 | 均可——sgcWebSockets 捆绑,ICS 可选 |
结束思考
ICS 和 sgcWebSockets 与其说是竞争对手,不如说是互补工具。ICS 是一个设计精良、免费、对消息泵友好的库,擅长经典互联网协议和轻量级 HTTP。sgcWebSockets 是一个专注的商业库,拥有现代 Web 栈——WebSocket、HTTP/2/3、MQTT、AMQP、WebRTC、IoT、AI API——并可扩展到大量并发连接。许多真实项目的正确答案是同时使用两者,为每个库选择它最擅长的协议。