Delphi WebSocket 组件——生产级客户端与服务器

面向 Delphi 和 C++Builder 的原生 RFC 6455 WebSocket 实现。构建可承载数千个并发连接、可在 Windows、macOS、Linux、iOS 和 Android 上运行的客户端和服务器,并通过内置的 WatchDog 自动重连机制在不稳定的网络中存活。

什么是 Delphi WebSocket 组件?

一个即插即用的 VCL/FMX 组件,将 WebSocket 协议转换为原生 Delphi 开发者熟悉的属性-事件 API。

Delphi WebSocket 组件是一个非可视组件,您将其放置在窗体上(或在运行时实例化),即可在 Delphi 应用程序与任何 RFC 6455 WebSocket 对等方(浏览器、Node.js 服务、nginx 反向代理、Mosquitto 代理、OpenAI Realtime 端点或另一个 Delphi 进程)之间打开全双工 TCP 通道。与轮询 HTTP 不同,WebSocket 保持连接打开:服务器可以在数据可用的那一刻推送,延迟以毫秒计,且没有每条消息的 HTTP 开销。

sgcWebSockets 自 2013 年以来一直是 Delphi 生态系统中参考性的 WebSocket 库。相同的 TsgcWebSocketClientTsgcWebSocketHTTPServer 组件可在 Delphi 7 至 Delphi 13 上运行,在 Win32、Win64、Linux64、macOS、iOS 和 Android 以及 C++Builder C2007 至 C13 上保持不变。没有托管运行时,没有 .NET 互操作层,没有 JavaScript 桥——它是一个纯 Pascal 实现,编译进您的二进制文件中。

组件类

TsgcWebSocketClient / TsgcWebSocketHTTPServer

标准

RFC 6455RFC 7692(permessage-deflate)

平台

Windows、macOS、Linux、iOS、Android

Delphi 版本

Delphi 7 → Delphi 13 + C++Builder

为什么选 sgcWebSockets 而非自己实现

编写一个 PING/PONG 处理程序很容易。但要在 TLS 终结的反向代理、IIS WebSocket 模块、企业防火墙、移动蜂窝切换以及 5,000 客户端负载测试中存活下来则不然。

一个 API,所有传输

普通 WebSocket(ws://)、TLS WebSocket(wss://)、基于 HTTP/2 的 WebSocket、基于 QUIC/HTTP/3 的 WebSocket、原始 TCP 回退——同一组件、同一事件。通过更改一个属性即可切换传输。

WatchDog 自动重连

启用 WatchDog,客户端将以指数退避方式重新连接、重新认证、重新订阅 MQTT 主题并重放任何排队的发布——经典的移动/IoT 模式,已为您编写。

线程问题已解决

服务器在底层使用 IOCP / kqueue / epoll 反应器。您编写事件处理程序;库通过线程池调度它们,并对每个连接进行序列化。

permessage-deflate

根据 RFC 7692 自动协商。将 JSON 负载减少 70–90 %,且被每个现代浏览器和负载均衡器支持。

包含子协议

MQTT 3.1.1/5.0、AMQP 0.9.1/1.0、STOMP、WAMP 和 Server-Sent Events 都运行在相同的 WebSocket 传输之上——一个 TCP 套接字,多个应用协议。

同时也是 HTTP 服务器

TsgcWebSocketHTTPServer 在与您的 WebSocket 端点相同的进程中提供静态文件、REST 端点、JWT 和 OAuth2 保护的资源、gzip 压缩的响应和 HTTP/2 升级。

真正可用的 TLS

OpenSSL(跨平台)、SChannel(Windows 内核 TLS)或 HTTP.sys。客户端证书、SNI、ALPN、带 0-RTT 的 TLS 1.3。

通道与广播

服务器端 Channels 按名称对连接分组。BroadcastBroadcastByChannelBroadcastByUser 在单次调用中向数千个对等方扇出。

久经考验

自 2013 年以来在银行、交易所、IoT 机群和交易公司投入生产。每月更新;history.txt 追踪每一次修复。

功能清单

RFC 中列出的一切,加上真实部署所需的运营加固。

能力客户端服务器
RFC 6455 帧(文本、二进制、ping、pong、close)
permessage-deflate(RFC 7692)
分片与续帧
客户端掩码消息不适用
TLS 1.2 / 1.3(OpenSSL + SChannel)
客户端证书 / mTLS
JWT 与 OAuth2 身份验证
HTTP/2 + WebSocket(RFC 8441)
基于 QUIC 的 HTTP/3 + WebSocket(RFC 9220)
WatchDog 自动重连不适用
心跳(PING/PONG)
通道与广播不适用
子协议(MQTT / AMQP / STOMP / WAMP / SSE)
HTTP.sys 托管(Windows 内核)不适用
Linux 守护进程模式

Hello WebSocket——12 行代码实现 Delphi 客户端

将 TsgcWebSocketClient 拖到表单上,设置 Host / Port,处理 OnMessage,设置 Active := True。

uses
  sgcWebSocket, sgcWebSocket_Classes;

procedure TForm1.FormCreate(Sender: TObject);
begin
  WS := TsgcWebSocketClient.Create(nil);
  WS.URL := 'wss://echo.websocket.events';
  WS.WatchDog.Enabled := True;
  WS.WatchDog.Interval := 5;
  WS.OnConnect := WSConnect;
  WS.OnMessage := WSMessage;
  WS.OnDisconnect := WSDisconnect;
  WS.Active := True;
end;

procedure TForm1.WSMessage(Connection: TsgcWSConnection; const Text: string);
begin
  Memo1.Lines.Add('<< ' + Text);
end;

procedure TForm1.ButtonSendClick(Sender: TObject);
begin
  WS.WriteData('{"hello":"world"}');
end;

服务器端是对称的——拖一个 TsgcWebSocketHTTPServer,设置 Port,处理 OnConnectOnMessage,调用 Broadcast 向每个已连接的对等方扇出。

支持的 Delphi 与 C++Builder 版本

一个源代码树,22 个运行时包——涵盖每个仍在积极商业使用中的 Delphi 版本。

版本版次
Delphi / RAD Studio7、2007、2009、2010、XE、XE2、XE3、XE4、XE5、XE6、XE7、XE8、10 Seattle、10.1 Berlin、10.2 Tokyo、10.3 Rio、10.4 Sydney、11 Alexandria、12 Athens、13
C++Builder2007、2009、2010、XE、XE2、XE3、XE4、XE5、XE6、XE7、XE8、10、10.1、10.2、10.3、10.4、11、12、13
FreePascal / Lazarus3.x(通过 sgcIndy 基础)
平台Win32、Win64、Linux64、macOS Intel/ARM、iOS 设备 + 模拟器、Android ARM/ARM64

继续探索

WebSocket 传输是库中所有其他协议的基础。

什么是 WebSockets?

RFC 6455 协议、握手、帧和用例的背景介绍。

MQTT 子协议

在同一 WebSocket 连接上运行 MQTT 3.1.1 / 5.0。

HTTP/2 客户端与服务器

带服务器推送和 WebSocket-over-HTTP/2 的多路复用 HTTP/2。

实时协议选择器

WebSocket vs SSE vs HTTP/2 推送 vs MQTT vs WebRTC——决策矩阵。

博客:通道、组与用户

向连接子集广播的模式指南。

博客:WatchDog 与 BeforeConnect

自动重连生命周期的底层工作方式。

博客:更快的压缩

为吞吐量与 CPU 调优 permessage-deflate。

常见问题解答

支持哪些 Delphi 版本?

从 Delphi 7(2002)到 Delphi 13(2025)的每个商业 Delphi 版本,外加匹配的 C++Builder 版本。我们从一个源代码树中提供 22 个独立的运行时包——每个 IDE 一个。没有单独的"遗留"SKU;每位客户都能获得每个版本。

WebSocket 组件支持 TLS / wss:// 吗?

支持。设置 URL := 'wss://...' 并选择一个 TLS 提供程序:OpenSSL(跨平台,随试用版一起提供)、SChannel(Windows 内核 TLS,无需部署 DLL)或 HTTP.sys(服务器端,证书存储在 Windows 证书存储中)。支持客户端证书、SNI、ALPN、TLS 1.3 和 0-RTT。

服务器可以处理多少个并发连接?

在 Windows 上,服务器使用 IOCP,通常在普通硬件上每进程可扩展到 50,000+ 个并发连接。在 Linux 上,epoll 反应器扩展性类似。硬限制是 OS 级别的(文件描述符、临时端口范围、内核内存),而不是库。

许可模式是什么?

无版税的每开发者永久许可,包含一年更新。提供单开发者、团队和站点许可——请参阅定价。每个商业版本均包含源代码。

准备好将 WebSockets 添加到您的 Delphi 应用了吗?

下载功能齐全的 30 天试用版——客户端、服务器、所有子协议、所有 Delphi 版本。