温馨提示:本文翻译自stackoverflow.com,查看原文请点击:delphi - Is there a way to have my response sent immediately in the TIdHTTPServer.OnCommandGet event?
delphi indy

delphi - 有没有办法让我的响应立即在TIdHTTPServer.OnCommandGet事件中发送?

发布于 2020-04-14 23:51:45

我要为收到的某些命令执行一些任务,并希望通过在执行任务时发送一些数据来防止客户端(读取)超时。

AResponseInfo对象是否提供任何东西来完成此任务?

我目前使用该ContentText属性,但是它在事件处理程序的末尾发送数据(看起来是这样)。

查看更多

提问者
Wolfgang Bures
被浏览
67
Remy Lebeau 2020-02-04 02:51

默认情况下,事件处理程序退出TIdHTTPServer时发送响应OnCommand...但是,可以通过以下任一方式更快地发送响应:

  • 根据需要填充属性调用AResponseInfo.WriteHeader()AResponseInfo.WriteContent()方法AResponseInfo

  • 直接写入TCP套接字,然后将该AResponseInfo.HeaderHasBeenWritten属性设置为true,这样TIdHTTPServer就不会尝试发送自己的响应。

注意:向客户端发送响应后,客户端可以使用相同的TCP连接自由发送新请求(如果使用了HTTP Keep-alive),但是您将阻止该连接处理这些请求,直到退出该请求为止。OnCommand...事件处理程序。

如果您需要进行长时间的处理,通常最好尽快将正常响应发送回客户端,例如102 Processing响应,退出OnCommand...事件处理程序,以便服务器重新控制连接,然后在服务器中进行实际处理。后台,然后让客户端根据需要使用后续请求来查询处理状态。您可以为该处理分配一个cookie或其他类型的服务器生成的ID,然后让客户端将该cookie / ID发送回服务器以查询处理的状态。