HTTP/2 赖以建立的扩展
HTTP/2 是在 TLS 握手期间协商出来的:客户端声明自己能讲哪些协议,服务器从中挑选一个。这个协商过程就是应用层协议协商 (ALPN),它发生在 TLS 层内部,位于任何 HTTP 组件所能触及的层级之下。标准 Indy 库不支持它,因此正是定制 Indy 库让 ALPN 以及随之而来的 HTTP/2 成为可能。
Indy 是一套开源的客户端与服务器通信库,sgcWebSockets 的部分组件以它为基础。标准 Indy 库不支持 ALPN,也不支持通过 OpenSSL 1.1.1 或 3.x 使用 TLS 1.3,因此 sgcWebSockets Enterprise 附带了一个支持这些能力的定制 Indy 版本。sgcCustomIndy 把同一个定制版本带给了 sgcWebSockets Core,否则只能升级到 Enterprise 版本才能获得它。
sgcIdSSLOpenSSL_Static
这个产品包适合谁,以及谁已经拥有它。两个答案都很简短。
sgcCustomIndy 附加在 sgcWebSockets Core 授权之上。它不能单独下单:它会作为第一个推荐的附加包出现在 Core 订单中,sgcAI、sgcMQ、sgcSocial、sgcAuth 和 sgcHTTP 各个产品包走的也是同一个订单流程。
授权随附完整源代码,因此这些 Indy 单元可以在您自己的项目中编译和单步调试,和库的其余部分完全一样。
定制 Indy 库是 sgcWebSockets Enterprise 和 eSeGeCe All-Access 的一部分,通过 sgcVer.inc 中的 SGC_CUSTOM_INDY 编译器定义默认启用。如果您持有其中任意一种授权,本页面上的全部内容您都已经拥有,无需再添加任何东西。
Standard 和 Professional 版本使用标准 Indy 库。如果您正在权衡是升级版本还是购买这个产品包,请参阅您需要哪个版本。
下面每一项都是 Indy 层本身的能力,而不是它上层某个组件的能力。正因如此,只有更换 Indy 库才能把它们打开。
HTTP/2 是在 TLS 握手期间协商出来的:客户端声明自己能讲哪些协议,服务器从中挑选一个。这个协商过程就是应用层协议协商 (ALPN),它发生在 TLS 层内部,位于任何 HTTP 组件所能触及的层级之下。标准 Indy 库不支持它,因此正是定制 Indy 库让 ALPN 以及随之而来的 HTTP/2 成为可能。
TLS 1.3 需要 OpenSSL 1.1.1 或 OpenSSL 3.0.0,而标准 Indy 库不支持这些分支。定制 Indy 库支持它们,因此基于它构建的客户端或服务器可以与要求 TLS 1.3 的端点完成协商,而不再受限于较旧 OpenSSL API 所能提供的能力。
OpenSSL 可以直接链接进您的应用程序,不必在运行时从 libcrypto 和 libssl DLL 中加载,这样一个使用 TLS 的应用程序就能以单个文件的形式部署。只有在使用定制 Indy 库时它才会生效,而这正是本产品包提供的东西。适用范围是 Delphi XE2 或更高版本上的 Windows 32 位和 64 位,下文有详细说明。
在 IDE 里替换 Indy 库是谁都不愿意做的事,所以这个产品包并不要求您这么做。定制 Indy 文件都加上了 sgc 前缀重新命名,IdGlobal 变成 sgcIdGlobal,两个版本可以毫无问题地共存。
| 标准 Indy,您 IDE 中已有的 | 定制 Indy,由本产品包添加 | 这意味着什么 |
|---|---|---|
IdGlobal.pas | sgcIdGlobal.pas | 单元名称不同,因此在搜索路径上不会发生冲突 |
IdTCPClient.pas | sgcIdTCPClient.pas | 两个库可以编译进同一个 IDE 和同一个项目 |
IdSSLOpenSSL.pas | sgcIdSSLOpenSSL.pas | 您现有的 TLS 代码继续使用它原本使用的单元 |
您的 IDE 中原有的 Indy 保持安装并保持注册状态。没有哪一步需要您卸载某个包、之后再把它装回去,或者维护两套 IDE 配置。
任何已经基于标准 Indy 库构建的东西,仍然基于它编译,使用的是逐字节完全相同的单元。定制版本是额外增加的,它不是替代品,也不是对您 IDE 施加的升级。
是否使用定制 Indy 库,由源代码目录下 sgcVer.inc 中的 SGC_CUSTOM_INDY 控制。它只是一个定义,因此再把定制版本关掉只是改一行代码的事。
重命名后的 Indy 单元随授权以源代码形式提供,因此它们会按照您的项目设置编译,并且可以像库的其余部分一样在调试器中单步跟踪。
Delphi 7 自带的是较旧的 Indy。否则,要在其中使用 sgcWebSockets,就得先自己把 Indy 10 安装进 IDE,而这一步往往在很多人写下第一行代码之前就把他们挡住了。有了随包捆绑的定制 Indy 库,这一步就不存在了。
先找到 Indy 10 的源代码,把它装进一个从未附带它的 Delphi 7 IDE,让那些包能够编译通过,然后才回过头来开始用 sgcWebSockets。这是一件完全独立的工作,却要在您真正想做的事情之前完成。
对于仍在维护 Delphi 7 代码的团队来说,这个前置条件往往直接决定了一套组件库是否还有机会被评估。
定制 Indy 库随产品包一起提供,就放在和其他所有文件相同的源代码目录里。没有 Indy 10 需要去找,没有 Indy 10 需要装进 IDE,也没有 Indy 10 的版本需要和组件保持匹配。
这一条只关乎 Indy 10 这个前置条件。静态 OpenSSL 链接是另一项功能,有自己的适用范围,即 Windows 以及 Delphi XE2 或更高版本,所以它并不适用于 Delphi 7。
没有任何需要配置的东西。把 sgcIdSSLOpenSSL_Static 加到项目的 uses 子句里,例如加在主 .dpr 中,应用程序下次运行时就会使用链接进可执行文件的 OpenSSL,客户端和服务器组件都是如此。
// Project1.dpr
uses
sgcIdSSLOpenSSL_Static;
// That is the whole configuration. No compiler directive to enable,
// no OpenSSL API version to choose. Remove the unit again and the
// application goes back to loading the OpenSSL DLLs exactly as before.
E2045 Bad object file format
SGC_CUSTOM_INDY
在不支持静态链接的版本或平台上,不会有任何东西出问题。应用程序会像以前一样继续加载 OpenSSL DLL,因此同一份源代码在任何地方都能构建。
定制 Indy 库并不是新东西。sgcWebSockets Enterprise 一直构建于它之上,而这个产品包就是 Core 获得它的途径。
| 您持有的授权 | Indy 库 | 说明 |
|---|---|---|
| sgcWebSockets Standard | 标准 | 没有 ALPN,也没有基于 OpenSSL 1.1.1 或 3.x 的 TLS 1.3 |
| sgcWebSockets Professional | 标准 | 没有 ALPN,也没有基于 OpenSSL 1.1.1 或 3.x 的 TLS 1.3 |
| sgcWebSockets Enterprise | 定制 | 已包含,默认启用 |
| eSeGeCe All-Access | 定制 | 已包含,默认启用 |
| 单独的 sgcWebSockets Core | 标准 | 这正是本产品包所改变的 |
| sgcWebSockets Core 加上 sgcCustomIndy | 定制 | 与 Enterprise 使用的定制版本完全相同 |
sgcCustomIndy 是带 sgc 前缀的构建版本,它与您现有的 Indy 并存,供 sgcWebSockets 组件使用。sgcIndy 则是另一个完整的 Indy 包,单元沿用原有名称,您把它安装到 IDE 中以取代原来的 Indy,这样 SMTP、FTP 等标准 Indy 组件也能获得同样的现代 TLS。两个产品不同,用途也不同。
sgcCustomIndy 单个开发者起价 €149。所有授权均包含完整源代码、1 年更新,以及 50% 到 70% 的续订折扣:续订 1 个包为 50%,2 个包为 60%,3 个及以上为 70%。sgcAI、sgcMQ、sgcSocial、sgcCustomIndy、sgcAuth、sgcHTTP 和 sgcREST 各算作一个包。
€149
提供 Single €149、Team €249 和 Site €399 授权。
sgcCustomIndy 没有独立的订购页面,因为这个产品包从来不是您开启订单时选择的那一项。它作为第一个推荐的附加包出现在 sgcWebSockets Core 订单中,因此您在订购 sgcAI、sgcMQ 或 sgcSocial 时只需一次点击就能把它加上,它会随同一份授权一起到达。由于 sgcAuth 的 WebAuthn 支持以及 sgcHTTP 的 HTTP/2 和 gRPC 客户端都需要它,订购这两个产品包中的任意一个都会自动把 sgcCustomIndy 加入购物车。如果您已经通过 Enterprise 或 All-Access 拥有它,可以将其移除。
已经在使用 sgcWebSockets Enterprise 或 eSeGeCe All-Access?定制 Indy 库已经属于您,关于这些版本涵盖的内容,请查看 sgcWebSockets 价格。
将 sgcCustomIndy 与我们的其他 Delphi、C++ Builder 和 .NET 组件库搭配使用。
HTTP/2 客户端、gRPC 客户端,以及 Google Cloud Pub/Sub、Calendar 和 FCM 客户端。独立产品,已包含 sgcWebSockets Core 运行时。
了解更多 →