sgcWebSockets 与 Chilkat 对比

面向正在权衡两者的 Delphi 和 C++ Builder 开发者的对比,全部标注来源。下面每一条关于 Chilkat 的说明都引自或取自 Chilkat 的页面,并在“来源”表格中给出链接,核对时间为 2026 年 9 月 6 日,对应 Chilkat 11.6.0 版本(2026 年 9 月 4 日发布)。每一条关于 sgcWebSockets 的说明都在同一天对照正式发行的 Object Pascal 源码核对过。

原生组件,还是跨语言库

这两个产品之间最重要的差别不是某项功能,而是它们各自以什么方式进入你的工程。两种选择都是有意为之,各自换来了对方拿不到的东西。

Chilkat

Chilkat Software · 跨语言库

面向多种编程语言发布的同一个库。对于 Delphi,Chilkat 把它描述为“一个带扁平化、可由 Pascal 调用的 API 的原生库”:Windows 上是 ChilkatDelphi32.dllChilkatDelphi64.dll,Linux 和 Android 上是 .so,macOS 上是按架构分的 .dylib,iOS 上是静态 .a 库,再加上每个类一个“小型 .pas 接口单元”,由你加入 uses 子句。对象都是不透明句柄。它不是 ActiveX,也从不需要 regsvr32

官方页面

Chilkat 的架构换来了什么

Chilkat 声明其 API 在各编程语言之间完全一致,并且一份许可“在所有受支持的操作系统、编程语言、架构和框架上均有效”。同样的类名和同样的方法名出现在 C#、VB.NET、Java、Python、Go、Node.js、PHP、Ruby、Swift、Objective-C、Perl、Tcl、PureBasic、Xojo、B4X、DataFlex、PowerShell 等语言中。如果你的组织已经在一个 C# 服务和一个 Python 作业里调用 Chilkat,那么再从 Delphi 调用它,在许可上不需要额外花钱,学习成本也极低。单一语言的组件库无法提供这一点。

边界在哪里显现

统一的跨语言 API 的代价,是它无法为任何一门语言量身定制。Chilkat 公布的 Delphi 下载包内容清单中没有设计时包,因此组件面板上不会出现任何东西,也没有对象查看器里的配置。Chilkat 还在文档中写明“Chilkat 的方法(在任何编程语言中)都不会通过抛出异常来表示失败。所有失败都通过方法的返回值来表示”,详细信息可从 LastErrorText 属性获取。对于一个必须在它所支持的每一种语言中都长得一样的库来说,这是一致的设计,只不过它并不是 Delphi 的习惯写法,因此建立在它之上的 Delphi 代码库,其错误处理读起来会与周围的代码不同。

单元名称,以及该怎么处理

由于单元是按类来命名的,Chilkat 提供了 Crypt2.pasHttp.pasZip.pas 等等。Chilkat 预料到这在大型工程中可能引发冲突,因此附带了 rename_units.batrename_units.py,它们会给每个单元加上 ck_ 前缀,并同步修正每个文件内的 unit 声明。sgcWebSockets 给每个单元和每个类都加上 sgcTsgc 前缀,因此不存在这个问题。在把两者中的任何一个加入既有代码库之前,这一点值得先知道,它并不是对谁的扣分。

并列对比,全部取自各厂商自己的材料

对勾表示厂商在文档中记录了该能力。短横线表示它没有出现在厂商自己公开的类清单或文档中,我们核对的就是这些,它并不代表该产品经过开发之后能做什么。波浪线表示部分支持,或者我们无法找到任何一方的明确文档。下面的“来源”表格列出了查阅过的每一个页面。

实时协议与消息

13 行
功能 sgcWebSockets Chilkat
WebSocket 客户端(RFC 6455) 连接到 WebSocket 端点并交换帧
WebSocket 服务器(RFC 6455) 监听、接受客户端并提供 WebSocket 连接服务
per-message-deflate(RFC 7692) WebSocket 压缩扩展 ~
MQTT 客户端(3.1.1 / 5.0) 在 TCP 或 WebSocket 上发布与订阅
AMQP 客户端(0.9.1 / 1.0) 面向 RabbitMQ 及兼容 broker 的消息通信
STOMP 客户端 基于文本帧的 broker 协议,适用于 ActiveMQ 和 RabbitMQ
WAMP 客户端 在 WebSocket 上实现 RPC 与发布订阅
Server-Sent Events 消费 HTTP 事件流 ~
HTTP/2 客户端 原生 HTTP/2 客户端,RFC 7540 / 9113 ~
MCP 客户端 Model Context Protocol 客户端
MCP 服务器 为 AI 模型托管工具与资源
AI 厂商客户端 OpenAI, Anthropic, Gemini, Grok, Mistral, DeepSeek
加密货币交易所客户端 面向具名交易所的带类型 WebSocket 客户端

Delphi 集成、编译器与平台

9 行
功能 sgcWebSockets Chilkat
IDE 组件面板上的组件 设计时安装、对象查看器、窗体设计器
实现代码编译进你的可执行文件 库被链接进 EXE,无需部署厂商的运行时
以 Delphi 异常形式报告失败 符合语言习惯的 try/except 与 OnException 处理
Delphi 7 厂商声明支持的最老 Delphi 版本
Delphi 13 Florence 厂商声明支持的最新 Delphi 版本
C++ Builder 已发布受支持的 C++ Builder 发行版
Lazarus / Free Pascal 已发布 Lazarus 或 FPC 的发行版
Windows、macOS、Linux、iOS、Android 厂商发布了全部五个目标平台
其他编程语言中的同一套 API 在 Object Pascal 之外也能用到完全相同的 API ~

更广的库覆盖面、源代码与授权

9 行
功能 sgcWebSockets Chilkat
电子邮件:SMTP、POP3、IMAP 邮箱访问与邮件撰写
SFTP、SSH、SCP、FTP 文件传输与远程 shell
PDF、ZIP、TAR、S/MIME 文档与归档处理
XML 与 CAdES 数字签名 XMLDSig、代码签名、证书处理
云存储客户端 S3、Azure Storage、Dropbox、Google Drive、OneDrive、SharePoint、Box
对称与公钥密码学 AES、RSA、ECC、哈希、密钥派生函数
包含实现的源代码 API 背后的代码随许可一起提供
免版税再分发 分发编译后的应用无需按份收费
功能完整的评估版 带有全部功能、有时间限制的构建
厂商文档已记录 未出现在厂商公开的清单中 ~ 部分支持,或双方都没有文档说明

逐行说明。MQTT、AMQP、STOMP 和 WAMP 这几行读自 Chilkat 的 Delphi DLL 参考索引,该索引列出了 103 个类,其中没有对应这四者中任何一个的类。per-message-deflate 和 HTTP/2 两行标注波浪线,是因为 Chilkat 的 WebSocket 和 Http 类参考文档中都没有提到它们,而没有提及并不能证明不存在。Server-Sent Events 的波浪线则反映出 Chilkat 的 ServerSentEvent 类在文档中被描述为事件流文本的解析器,而不是一个流式 HTTP 客户端。C++ Builder 那一行两边都是对勾,但发行形态并不相同:Chilkat 为 Win32 和 Win64 上的 C++ Builder 12 和 13 发布静态库,而 sgcWebSockets 提供从 2007 到 13 共十八个 C++ Builder 版本的包工程。在电子邮件、文件传输、文档和云存储几行中,sgcWebSockets 是短横线,因为这些不在本产品之内;eSeGeCe 把签名和 PDF 相关工作作为单独的产品出售,而本页只比较 sgcWebSockets。还有两个细节值得从表格里带走:Chilkat 声明对 Delphi 7 的支持仅限 Windows,而两份 AI 厂商清单接近但并不相同,Chilkat 那边点名了 Perplexity,sgcWebSockets 这边点名了 Ollama。

打开一个 WebSocket 连接

同一个任务在两个产品中的写法。Chilkat 那段代码是从 Chilkat 自己公开的 Delphi DLL 示例精简而来,为了篇幅去掉了其中的错误检查;sgcWebSockets 那段代码使用 TsgcWebSocketClient 公开的属性和事件。

uses
  sgcWebSocket, sgcWebSocket_Classes;

// FClient is a TsgcWebSocketClient field on the form
procedure TForm1.FormCreate(Sender: TObject);
begin
  FClient := TsgcWebSocketClient.Create(Self);
  FClient.Host := 'echo.example.com';
  FClient.Port := 443;
  FClient.TLS  := True;

  // reconnect automatically if the link drops
  FClient.WatchDog.Enabled  := True;
  FClient.WatchDog.Interval := 10;
  FClient.WatchDog.Attempts := 0;

  FClient.OnMessage := ClientMessage;
  FClient.Active    := True;
end;

procedure TForm1.ClientMessage(Connection: TsgcWSConnection;
  const Text: string);
begin
  Memo1.Lines.Add(Text);
end;

procedure TForm1.SendClick(Sender: TObject);
begin
  FClient.WriteData('hello');
end;
uses
  System.SysUtils, Rest, WebSocket;

procedure TForm1.Button1Click(Sender: TObject);
var
  success: Boolean;
  rest: HCkRest;
  ws: HCkWebSocket;
  responseBody: PWideChar;
  statusCode: Integer;
begin
  // the WebSocket runs over an established Chilkat Rest connection
  rest := CkRest_Create();
  success := CkRest_Connect(rest, 'someserver.com', 80, False, False);

  ws := CkWebSocket_Create();
  success := CkWebSocket_UseConnection(ws, rest);

  // add the open-handshake headers, then send the GET
  CkWebSocket_AddClientHeaders(ws);
  responseBody := CkRest__fullRequestNoBody(rest, 'GET', '/something');
  statusCode := CkRest_getResponseStatusCode(rest);

  // 101 is expected, then validate Sec-WebSocket-Accept
  success := CkWebSocket_ValidateServerHandshake(ws);
  if success <> True then
    Memo1.Lines.Add(CkWebSocket__lastErrorText(ws));

  CkRest_Dispose(rest);
  CkWebSocket_Dispose(ws);
end;

精简自 Chilkat 公开在 example-code.com/delphiDll/websocket_connect.asp 的代码。完整版本会检查每一次调用的返回值,并在失败时打印 LastErrorText,这正是 Chilkat 在文档中给出的错误模型。

接受连接正是两者分道扬镳之处

Chilkat 明确说明它的 WebSocket 类是客户端,并为监听一侧提供了一个单独的 Socket 类。

Chilkat 的文档怎么说

“Chilkat.WebSocket 实现的是 WebSocket 协议的客户端一侧。它向一个已有的 WebSocket 服务器发起打开握手。它不监听进来的连接,不接受客户端,也不实现 WebSocket 服务器。”Chilkat 另有一个 Socket 类确实覆盖服务器端套接字,文档描述为“在实现简单的套接字服务器或自定义监听流程时,监听并接受进来的客户端连接”,因此可以在它之上搭建一个 WebSocket 服务器。握手、分帧、控制帧以及任何扩展都要由你自己写。

uses
  sgcWebSocket, sgcWebSocket_Classes;

// FServer is a TsgcWebSocketServer field on the form
procedure TForm1.FormCreate(Sender: TObject);
begin
  FServer := TsgcWebSocketServer.Create(Self);
  FServer.Port      := 8080;
  FServer.OnMessage := ServerMessage;
  FServer.Active    := True;
end;

procedure TForm1.ServerMessage(Connection: TsgcWSConnection;
  const Text: string);
begin
  // answer this client
  Connection.WriteData('echo: ' + Text);
  // or tell everybody
  FServer.Broadcast(Text);
end;

TsgcWebSocketServerTsgcWebSocketHTTPServer 从 Professional 版本起注册。Delphi 功能矩阵列出了每个版本包含哪些组件。

随你的应用一起分发的东西

两个产品对编译后的应用都是免版税的。差别在于是否有东西必须跟着可执行文件一起走。

Windows 上的 Chilkat

“Chilkat 的 DLL 必须与你应用的 EXE 位于同一目录。”Chilkat 建议用一个构建后事件把目标平台对应的 DLL 复制过去,并列出了文件缺失时会看到的错误。Windows 上发布了三个二进制文件:32 位、64 位,以及面向 Windows on Arm 目标的 Arm64EC 构建。

Linux、macOS 和移动端上的 Chilkat

Linux 通过常规的加载器搜索路径来解析 libchilkatdelphi_x86_64.so,而该路径不包含可执行文件自己所在的目录,因此 Chilkat 在文档中给出两种做法:用 ldconfig 做系统级安装,或者设置 LD_LIBRARY_PATH。macOS 上的 dylib 由 Chilkat 做了代码签名,并与可执行文件放在一起分发。iOS 使用链接进应用的静态库;Android 则把每个 ABI 对应的一个 .so 打包进 APK。Chilkat 声明 Linux 构建需要 glibc 2.27 或更新版本。

sgcWebSockets

这个库会编译进可执行文件,因此在任何平台上都不需要部署 sgc 的运行时。唯一还可能需要文件的是 TLS:OpenSSL 后端需要有 OpenSSL 库存在,而 Windows 上的 SChannel 后端从 Professional 版本起可用,它使用操作系统自带的实现,不需要任何额外文件。

各自覆盖而对方没有覆盖的部分

上面矩阵中出现分歧的那些行,汇总在一处。Chilkat 的条目来自 Chilkat 公开的类清单和产品页面,sgcWebSockets 的条目来自正式发行的 Object Pascal 源码。

Chilkat 有而 sgcWebSockets 没有

  • 在 Chilkat 支持的每一种语言中都使用相同的类名和方法名,且共用一份许可。Chilkat 声明其 API 在各编程语言之间完全一致,并且一份许可“在所有受支持的操作系统、编程语言、架构和框架上均有效”。
  • 电子邮件:SMTP、POP3 和 IMAP。
  • 文件传输与远程 shell:SFTP、SSH、SCP 和 FTP。
  • 文档与归档:PDF、ZIP、TAR 和 S/MIME。
  • XML 与 CAdES 数字签名、代码签名和证书处理。
  • 面向 S3、Azure Storage、Dropbox、Google Drive、OneDrive、SharePoint 和 Box 的云存储客户端。
  • AI 厂商清单中列出了 Perplexity,而 sgcWebSockets 的清单中点名的是 Ollama。

电子邮件、文件传输、文档和云存储这几行缺的是 sgcWebSockets,而不是 eSeGeCe:签名和 PDF 相关工作作为单独的产品出售,而本页只比较 sgcWebSockets。

两种不同形态的授权

两家厂商都公开了自己的条款。价格会变,所以本节只描述授权模式并给出价格页面的链接,不引用具体数字。

Chilkat

一份 Bundle 许可覆盖 Chilkat 的每一个类。Chilkat 把它描述为“一份不会过期的永久许可”,并配有一个维护期,用于管理升级到更新版本的权利;如果维护期失效超过三个月,Chilkat 声明必须按常规价格重新购买许可。级别分为 1 名开发者、最多 4 名开发者,以及最多 8 名开发者的团队。该许可免版税,Chilkat 声明可再分发文件可以包含在你的安装程序中,并可在任意数量的计算机或服务器上使用。这些库“在 30 天评估期内功能完整”,只要向 UnlockBundle 传入任意字符串即可解锁。

Chilkat 授权说明

卡住的时候会发生什么

两家厂商都公开了联系方式。本节只转述各自的说法,不评价实际效果。

Chilkat

Chilkat 的帮助页面把技术问题引向一个邮箱地址,并指向参考文档、example-code.com 上数百个可直接运行的 Delphi DLL 示例、tools.chilkat.io 上的在线代码生成器,以及 Chilkat 的博客。参考文档覆盖每一种受支持语言中的每一个类,示例站点则按任务组织。

eSeGeCe

sgcWebSockets 的支持通过 eSeGeCe 的技术支持系统进行,网站上还提供在线帮助、可下载的用户手册、随包附带的示例工程和发布历史。由于除 Basic 之外的每个版本都附带源码,一次技术支持对话可以直接指向你和对方眼前都有的某一行代码。

sgcWebSockets 与 Chilkat 常见问题

开发者在两者之间做决定时会问的问题。

不是,Chilkat 自己也没有这样描述它。Chilkat 把它的 Delphi 产品描述为“一个带扁平化、可由 Pascal 调用的 API 的原生库”:Windows 上是一个 DLL,Linux 和 Android 上是 .so,macOS 上是按架构分的 .dylib,iOS 上是静态 .a 库,每个类配一个 Pascal 接口单元,由你加入 uses 子句。对象都是句柄,因此 CkWebSocket_Create 返回一个 HCkWebSocket,你要把它作为每次调用的第一个参数传入,并用 CkWebSocket_Dispose 释放。Chilkat 公布的下载包内容清单中没有设计时包,因此组件面板上不会出现任何东西。sgcWebSockets 走的是另一条路:编译进你工程的 Object Pascal 单元,并在 IDE 组件面板上注册组件。
通过它的 WebSocket 类不行。Chilkat 的参考文档写得很直白:“Chilkat.WebSocket 实现的是 WebSocket 协议的客户端一侧。它向一个已有的 WebSocket 服务器发起打开握手。它不监听进来的连接,不接受客户端,也不实现 WebSocket 服务器。”Chilkat 另有一个 Socket 类确实可以接受进来的 TCP 连接,因此可以在它之上写一个 WebSocket 服务器,但分帧、握手和扩展相关的工作都要由你来做。sgcWebSockets 从 Professional 版本起提供 TsgcWebSocketServerTsgcWebSocketHTTPServer
不需要。这个库是 Object Pascal 源码,由 Delphi 编译器链接进你的可执行文件,因此没有任何东西需要复制到 EXE 旁边。TLS 是唯一还可能出现 DLL 的地方:OpenSSL 后端需要 OpenSSL 库,而 Windows 上的 SChannel 后端从 Professional 版本起可用,它使用操作系统自带的实现,不需要额外文件。Chilkat 则明确说明它的运行时库必须随应用一起走:“Chilkat 的 DLL 必须与你应用的 EXE 位于同一目录。”在 Linux 上,共享对象必须做系统级安装,或者通过 LD_LIBRARY_PATH 找到。
可以。Chilkat 声明其 API 在各编程语言之间完全一致,并且一份许可覆盖全部语言,因此一个已经在别的语言里熟悉 CkHttpCkJsonObject 的团队,可以把这份经验直接带进 Delphi,不需要额外的许可成本,这是单一语言的组件库无法比拟的优势。Chilkat 公开的类清单中没有 WebSocket 服务器,也没有 MQTT、AMQP、STOMP 或 WAMP。sgcWebSockets 这五项都覆盖,但只支持 Object Pascal。
sgcWebSockets 在 Standard、Professional 和 Enterprise 版本中都提供完整的 Object Pascal 源码,因此实现代码就在磁盘上,可以单步进入调试器,也可以在本地打补丁。编译后 DCU 的选项作为 sgcWebSockets Basic 单独出售。Chilkat 的 Delphi 下载包中每个类一个 .pas 接口单元,外加预先构建好的二进制文件;实现代码在二进制文件内部,Chilkat 不发布源码版本。
Chilkat 声明支持“Delphi XE 到 Delphi 13”,并补充说它“在 Windows 上也可用于 Delphi 7、8 以及 2005–2010”。它单独的 C++ Builder 发行版为 C++ Builder 12 和 13 的 Win32 与 Win64 发布静态库。sgcWebSockets 提供覆盖从 Delphi 7 到 Delphi 13 Florence 共二十一个 Delphi 版本的设计时与运行时包,以及从 C++ Builder 2007 到 C++ Builder 13 的十八个 C++ Builder 包工程,外加一个 Lazarus 包。
关于 Chilkat 的每一条说明,都是在 2026 年 9 月 6 日从 Chilkat 的页面上读到的,对应 2026 年 9 月 4 日的 Chilkat 11.6.0 版本,这些页面都在下面的“来源”表格中给出了链接。凡是 Chilkat 自己的文档没有回答的问题,矩阵里标的是波浪线而不是叉号,因为没有文档并不等于没有该功能。关于 sgcWebSockets 的每一条说明,都读自正式发行的 Delphi 源码、组件注册单元,以及 sgcVer.inc 中的编译器定义,后者才决定每个版本实际包含什么。

关于 Chilkat 的每一条说法都有链接

下面所有 Chilkat 页面都是在 2026 年 9 月 6 日阅读的,对应 2026 年 9 月 4 日的 Chilkat 11.6.0 版本。如果你发现本页有内容与 Chilkat 自己的材料不再一致,请告诉我们,我们会更正。

来源URL
Chilkat:Delphi DLL 产品与安装页面(v11.6.0,2026 年 9 月 4 日)https://www.chilkatsoft.com/delphiDll.asp
Chilkat:Delphi DLL 参考文档,完整类索引https://www.chilkatsoft.com/refdoc/delphidll.asp
Chilkat:Delphi DLL 的 WebSocket 类参考文档https://www.chilkatsoft.com/refdoc/dd_CkWebSocketRef.html
Chilkat:Delphi DLL 的 Socket 类参考文档https://www.chilkatsoft.com/refdoc/dd_CkSocketRef.html
Chilkat:Delphi DLL 的 ServerSentEvent 类参考文档https://www.chilkatsoft.com/refdoc/dd_CkServerSentEventRef.html
Chilkat:Ai 类参考文档(厂商清单)https://www.chilkatsoft.com/refdoc/dd_CkAiRef.html
Chilkat:Mcp 类参考文档(Model Context Protocol 客户端)https://www.chilkatsoft.com/refdoc/dd_CkMcpRef.html
Chilkat:Delphi DLL 的 Http 类参考文档https://www.chilkatsoft.com/refdoc/dd_CkHttpRef.html
Chilkat:公开的 Delphi DLL WebSocket Connect 示例https://www.example-code.com/delphiDll/websocket_connect.asp
Chilkat:Delphi DLL WebSocket 示例索引https://www.example-code.com/delphiDll/websocket.asp
Chilkat:面向 Embarcadero C++ Builder 的 C / C++ 库(v11.5.0,2026 年 6 月 2 日)https://www.chilkatsoft.com/downloads-cpp-builder.asp
Chilkat:下载索引(每种语言一个发行版)https://www.chilkatsoft.com/downloads.asp
Chilkat:产品页面(受支持的语言与环境)https://www.chilkatsoft.com/products.asp
Chilkat:授权说明(永久许可、维护期、免版税)https://www.chilkatsoft.com/licensingExplained.asp
Chilkat:购买页面(授权级别)https://www.chilkatsoft.com/purchase
Chilkat:技术帮助(返回值、LastErrorText、异常)https://www.chilkatsoft.com/support.asp
Chilkat:Lazarus / Free Pascal 发行版https://www.chilkatsoft.com/lazarus.asp
sgcWebSockets:产品页面https://www.esegece.com/products/websockets/
sgcWebSockets:按版本划分的 Delphi 功能矩阵https://www.esegece.com/products/websockets/features/feature-matrix-delphi/
sgcWebSockets:价格与版本对比https://www.esegece.com/pricing/
sgcWebSockets:与 Indy、ICS、TMS 和 mORMot 2 的对比https://www.esegece.com/products/websockets/comparison/
RFC 6455,WebSocket 协议https://datatracker.ietf.org/doc/html/rfc6455
RFC 7692,WebSocket 的压缩扩展https://datatracker.ietf.org/doc/html/rfc7692

其他对比。同样方式的对比还有 TMS Software/n software 的 IPWorks,以及涵盖 Indy、ICS 和 mORMot 2 的更广泛综述 Delphi 与 C++ Builder WebSocket 库。如果选库的问题已经定了,你更想看代码,那么 Delphi 使用场景会一页一个任务,把你从空白窗体带到能跑起来的程序。

超值之选:All-AccesseSeGeCe 全部产品,含高级支持,每年 €1,059 起。
查看 All-Access 价格

在你自己的工程里试试 sgcWebSockets

下载免费试用版,在窗体上放一个客户端和一个服务器,在做决定之前先看看它是否合用。