Indy

Indy 库是一个开源的客户端/服务器通信库,支持 TCP/UDP/RAW 套接字以及 100 多种高级协议,包括 SMTP、POP3、IMAP、NNTP、HTTP、FTP 等。Indy 使用 Delphi 编写,也适用于 C++Builder 和 FreePascal。sgcWebSockets 将 Indy 用作某些组件的基础,不同的 sgcWebSockets 版本对 Indy 库的使用方式不同。

 

sgcWebSockets 支持 HTTP/2 等需要 ALPN 的协议,可使用 openSSL 1.1.1 或 openSSL 3.0.0 使用 TLS 1.3……所有这些功能都不被标准 Indy 库支持,因此 sgcWebSockets Enterprise 版本包含支持这些功能的自定义 Indy 库。为了避免从 IDE 中卸载标准 Indy 库,所需的 Indy 文件通过添加前缀"sgc"重命名,例如:"IdGlobal" 单元重命名为 "sgcIdGlobal"。这样,两个版本可以共存而不会产生问题。

 

以下是每个 sgcWebSockets 版本使用的 Indy 版本:

 

sgcWebSockets 版本 Indy 版本
STANDARD Standard
PROFESSIONAL Standard
ENTERPRISE 自定义

 

拥有"已注册"许可证(即 sgcWebSockets 包拆分之前的旧许可证)的客户将找到以下 sgcWebSockets 包版本:

 

sgcWebSockets 版本 Indy 版本
sgcWebSockets Standard
sgcWebSockets min Standard
sgcWebSockets min Indy* 自定义

 

*sgcWebSockets_min_indy 与 sgcWebSockets 企业版相同。

 

自定义 Indy 版本的使用在源文件夹中的 "sgcVer.inc" 文件中定义。有一个名为 "SGC_CUSTOM_INDY" 的编译器定义,用于启用或禁用此 Indy 版本的使用。如果您拥有 Enterprise Edition 并希望禁用自定义 Indy 的使用,只需删除以下编译器定义:

 

{$DEFINE SGC_CUSTOM_INDY}

 

当然,如果您启用了 SGC_CUSTOM_INDY 但源文件夹中没有所需的自定义 Indy 版本单元,此编译器定义将不起作用。

 

sgcIndy 包

自定义 Indy 版本的使用不局限于 sgcWebSockets 组件。eSeGeCe ALL-ACCESS 版本提供了一个附加的完整 Indy 包,包含支持 OpenSSL 1.1.1 和 OpenSSL 3.0.0 的完整 Indy 库。您必须先卸载 IDE 中当前安装的 Indy 库,然后再安装此版本(此处的单元未重命名)。

 

当您想使用 OpenSSL 库时,只需在加载 OpenSSL 库之前将全局变量 OPENSSL_API_VERSION 设置为所需的 OpenSSL API 版本。此全局变量位于 IdSSLOpenSSLHeaders 单元中。

 

示例:使用 openSSL 1.1.1 库

 

OPENSSL_API_VERSION := opSSL_1_1;

 

 

如何使用单个 sgcIndy 包

当在同一应用程序中同时使用 eSeGeCe ALL-ACCESS 和 sgcIndy 包时,源代码可能会重复,因为 sgcWebSockets Enterprise 版本使用了自定义 Indy 版本,其中 Indy 单元已被重命名。这意味着,例如,sgcIdGlobal.pas 和 IdGlobal.pas 等单元将在同一应用程序中编译(前者在使用 sgcWebSockets Enterprise 包的任何组件时使用,后者在使用 sgcIndy 包的任何组件(如 ftp、smtp 等)时使用)。

 

为避免此行为,sgcWebSockets 包可以配置为使用已安装的 sgcIndy 版本,同时仍然使用所有组件。请按照以下说明操作:

 

1. 打开位于 sgcWebSockets 包的 Source 文件夹中的 sgcVer.inc 文件。

2. 禁用编译器指令:SGC_CUSTOM_INDY。此选项告知编译器以 sgcId*.pas 开头的文件存在,并且在编译 sgcWebSockets Enterprise 包时必须使用这些文件。

3. 启用以下编译器指令:SGC_INDY_LIB。此选项告知编译器 sgcIndy 包已安装,编译包时必须使用它。

 

{$DEFINE SGC_INDY_LIB}

 

使用上述配置,sgcWebSockets Enterprise 包将使用已安装的 sgcIndy 包,所有使用该包的功能(如 http/2、IOCP、openSSL 3.0 等)都将启用。