TIdTCPClient 连接池
TIdTCPClient connection pool
我想使用 TIdTCPClient
从使用 Delphi 和 TWebModule
制作的 Web 服务器应用程序连接到 Redis。
目前在创建 WebModule 时我创建了一个新的 TIdTCPClient
并连接到 Redis,例如:
procedure TWebService.WebModuleCreate(Sender: TObject);-
begin
FClient := TIdTCPClient.Create();
FClient.Connect('REDIS_HOST', 6379);
end;
在网络模块销毁上,我断开连接并释放资源,例如:
procedure TWebService.WebModuleDestroy(Sender: TObject);
begin
FClient.Disconnect;
FClient.Free;
end;
一切正常...但是通过这种方式,我在每个新请求上都创建了一个新连接,并且在很长一段时间后,TIME_WAIT
套接字的数量越来越多。
我想实现一个全局连接池,它始终打开固定数量的连接(例如:50 个)并且只使用这些连接。
Indy 有管理 TCP 连接池的东西吗?
不,Indy 不提供任何池化 TCP 连接。您必须在自己的代码中实现自己的 TIdTCPClient
对象池。
我想使用 TIdTCPClient
从使用 Delphi 和 TWebModule
制作的 Web 服务器应用程序连接到 Redis。
目前在创建 WebModule 时我创建了一个新的 TIdTCPClient
并连接到 Redis,例如:
procedure TWebService.WebModuleCreate(Sender: TObject);-
begin
FClient := TIdTCPClient.Create();
FClient.Connect('REDIS_HOST', 6379);
end;
在网络模块销毁上,我断开连接并释放资源,例如:
procedure TWebService.WebModuleDestroy(Sender: TObject);
begin
FClient.Disconnect;
FClient.Free;
end;
一切正常...但是通过这种方式,我在每个新请求上都创建了一个新连接,并且在很长一段时间后,TIME_WAIT
套接字的数量越来越多。
我想实现一个全局连接池,它始终打开固定数量的连接(例如:50 个)并且只使用这些连接。
Indy 有管理 TCP 连接池的东西吗?
不,Indy 不提供任何池化 TCP 连接。您必须在自己的代码中实现自己的 TIdTCPClient
对象池。