首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Indy idHttp冻结-如何使用keep-alive?

Indy idHttp冻结-如何使用keep-alive?
EN

Stack Overflow用户
提问于 2011-11-30 03:52:54
回答 1查看 7.1K关注 0票数 5

我开发了一个使用idHttpServer的and服务器和一个使用idHTTP的客户端应用程序。

我使用的是Delphi2010和主干上最新的indy svn源代码。

这个应用程序在一个循环中向Web服务器发送大约1000个请求。由于TIME_WAITS和连接到and服务器的开销,我需要使用keep-alive。问题是:在向服务器发出大约700个请求后,我的应用程序(客户端)在将数据发送到when服务器时挂起了近10分钟(几乎每次都会发生)。

因此,我需要知道如何在indy中正确使用keep-alive。

到目前为止,我有以下代码:

在客户端:

代码语言:javascript
复制
oIndyHttpClient := TIdHTTP.Create(nil);
oIndyHttpClient.ProxyParams.Clear;
oIndyHttpClient.Request.CacheControl := 'no-cache';
oIndyHttpClient.ProtocolVersion := pv1_1;
oIndyHttpClient.HTTPOptions := oIndyHttpClient.HTTPOptions + [hoKeepOrigProtocol];
oIndyHttpClient.ReuseSocket := rsOSDependent;
oIndyHttpClient.Request.Connection := 'keep-alive';

在服务器端:

代码语言:javascript
复制
oIdHttpServer.OnCommandGet := Self.OnClientRead;
oIdHttpServer.AutoStartSession := False;
oIdHttpServer.KeepAlive := False;

procedure TPLKWSServerSocketIndy.OnClientRead(AContext: TIdContext; ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
begin
  //do some stuff here
  if LowerCase(ARequestInfo.Connection) = 'keep-alive' then begin
    AResponseInfo.CloseConnection := False;
  end
  else begin
    AResponseInfo.CloseConnection := True;
  end;
end;

我做得对吗?是什么原因导致客户端应用程序冻结并且无法完成post请求?

我尝试在客户端冻结时调试服务器,但OnClientRead方法没有触发。在我看来,客户端在尝试连接do web服务器时遇到了问题。

如果我将客户端代码修改为:

代码语言:javascript
复制
oIndyHttpClient.ProtocolVersion := pv1_0;
oIndyHttpClient.Request.Connection := 'close';

客户端应用程序不会冻结,一切都很好。

我应该在向服务器发送请求之前清除IOHandler.InputBuffer吗?还有什么我需要做的吗?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-11-30 04:13:54

您无需在服务器端手动管理keep-alives。TIdHTTPServer会帮你处理这件事。只需将TIdHTTPServer.KeepAlive属性设置为True (默认情况下为False,您的代码也会将其设置为False ),而根本不设置AResponseInfo.CloseConnection属性。在触发OnCommandGet事件之前,TIdHTTPServer会根据每个请求决定要将其设置为什么值。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8316837

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档