我要为收到的某些命令执行一些任务,并希望通过在执行任务时发送一些数据来防止客户端(读取)超时。
该AResponseInfo
对象是否提供任何东西来完成此任务?
我目前使用该ContentText
属性,但是它在事件处理程序的末尾发送数据(看起来是这样)。
默认情况下,事件处理程序退出TIdHTTPServer
时发送响应OnCommand...
。但是,可以通过以下任一方式更快地发送响应:
在根据需要填充属性后调用AResponseInfo.WriteHeader()
和AResponseInfo.WriteContent()
方法AResponseInfo
。
直接写入TCP套接字,然后将该AResponseInfo.HeaderHasBeenWritten
属性设置为true,这样TIdHTTPServer
就不会尝试发送自己的响应。
注意:向客户端发送响应后,客户端可以使用相同的TCP连接自由发送新请求(如果使用了HTTP Keep-alive),但是您将阻止该连接处理这些请求,直到退出该请求为止。OnCommand...
事件处理程序。
如果您需要进行长时间的处理,通常最好尽快将正常响应发送回客户端,例如102 Processing
响应,退出OnCommand...
事件处理程序,以便服务器重新控制连接,然后在服务器中进行实际处理。后台,然后让客户端根据需要使用后续请求来查询处理状态。您可以为该处理分配一个cookie或其他类型的服务器生成的ID,然后让客户端将该cookie / ID发送回服务器以查询处理的状态。