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