一个即插即用的 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 库。相同的 TsgcWebSocketClient 和 TsgcWebSocketHTTPServer 组件可在 Delphi 7 至 Delphi 13 上运行,在 Win32、Win64、Linux64、macOS、iOS 和 Android 以及 C++Builder C2007 至 C13 上保持不变。没有托管运行时,没有 .NET 互操作层,没有 JavaScript 桥——它是一个纯 Pascal 实现,编译进您的二进制文件中。
编写一个 PING/PONG 处理程序很容易。但要在 TLS 终结的反向代理、IIS WebSocket 模块、企业防火墙、移动蜂窝切换以及 5,000 客户端负载测试中存活下来则不然。
普通 WebSocket(ws://)、TLS WebSocket(wss://)、基于 HTTP/2 的 WebSocket、基于 QUIC/HTTP/3 的 WebSocket、原始 TCP 回退——同一组件、同一事件。通过更改一个属性即可切换传输。
启用 WatchDog,客户端将以指数退避方式重新连接、重新认证、重新订阅 MQTT 主题并重放任何排队的发布——经典的移动/IoT 模式,已为您编写。
服务器在底层使用 IOCP / kqueue / epoll 反应器。您编写事件处理程序;库通过线程池调度它们,并对每个连接进行序列化。
根据 RFC 7692 自动协商。将 JSON 负载减少 70–90 %,且被每个现代浏览器和负载均衡器支持。
MQTT 3.1.1/5.0、AMQP 0.9.1/1.0、STOMP、WAMP 和 Server-Sent Events 都运行在相同的 WebSocket 传输之上——一个 TCP 套接字,多个应用协议。
TsgcWebSocketHTTPServer 在与您的 WebSocket 端点相同的进程中提供静态文件、REST 端点、JWT 和 OAuth2 保护的资源、gzip 压缩的响应和 HTTP/2 升级。
OpenSSL(跨平台)、SChannel(Windows 内核 TLS)或 HTTP.sys。客户端证书、SNI、ALPN、带 0-RTT 的 TLS 1.3。
服务器端 Channels 按名称对连接分组。Broadcast、BroadcastByChannel 和 BroadcastByUser 在单次调用中向数千个对等方扇出。
自 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 守护进程模式 | 是 | 是 |
将 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,处理 OnConnect 和 OnMessage,调用 Broadcast 向每个已连接的对等方扇出。
一个源代码树,22 个运行时包——涵盖每个仍在积极商业使用中的 Delphi 版本。
| 版本 | 版次 |
|---|---|
| Delphi / RAD Studio | 7、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++Builder | 2007、2009、2010、XE、XE2、XE3、XE4、XE5、XE6、XE7、XE8、10、10.1、10.2、10.3、10.4、11、12、13 |
| FreePascal / Lazarus | 3.x(通过 sgcIndy 基础) |
| 平台 | Win32、Win64、Linux64、macOS Intel/ARM、iOS 设备 + 模拟器、Android ARM/ARM64 |
WebSocket 传输是库中所有其他协议的基础。
RFC 6455 协议、握手、帧和用例的背景介绍。
在同一 WebSocket 连接上运行 MQTT 3.1.1 / 5.0。
带服务器推送和 WebSocket-over-HTTP/2 的多路复用 HTTP/2。
WebSocket vs SSE vs HTTP/2 推送 vs MQTT vs WebRTC——决策矩阵。
向连接子集广播的模式指南。
自动重连生命周期的底层工作方式。
为吞吐量与 CPU 调优 permessage-deflate。
从 Delphi 7(2002)到 Delphi 13(2025)的每个商业 Delphi 版本,外加匹配的 C++Builder 版本。我们从一个源代码树中提供 22 个独立的运行时包——每个 IDE 一个。没有单独的"遗留"SKU;每位客户都能获得每个版本。
支持。设置 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 级别的(文件描述符、临时端口范围、内核内存),而不是库。
无版税的每开发者永久许可,包含一年更新。提供单开发者、团队和站点许可——请参阅定价。每个商业版本均包含源代码。