Delphi 轻松的时间连接和接收方式?

Delphi 轻松的时间连接和接收方式?,delphi,indy,Delphi,Indy,在TIdHTTP.get()或TIdHTTP.Put()操作中,是否有一种简单的方法可以获取Indy连接所需的时间以及接收数据所需的时间 编辑: 我想获取统计信息,以确定哪些超时最适合用于ReceiveTimeout和ConnectTimeOut属性。对于连接计时,可以使用OnStatus(hsConnecting)和OnStatus(hsConnected)/OnConnected事件。请注意,如果URL涉及主机名(通常情况下),则在OnStatus(hsConnecting)事件之前还有一个

TIdHTTP.get()
TIdHTTP.Put()
操作中,是否有一种简单的方法可以获取Indy连接所需的时间以及接收数据所需的时间

编辑:

我想获取统计信息,以确定哪些超时最适合用于
ReceiveTimeout
ConnectTimeOut
属性。

对于连接计时,可以使用
OnStatus(hsConnecting)
OnStatus(hsConnected)
/
OnConnected
事件。请注意,如果URL涉及主机名(通常情况下),则在
OnStatus(hsConnecting)
事件之前还有一个
OnStatus(hsResolving)
事件。但是,DNS解析此时不会在
ConnectTimeout
处理中发挥作用

对于接收定时,这有点棘手,因为没有用于检测发送请求结束或读取响应开始/结束的事件1。而且,给定的HTTP请求可能涉及多个步骤(重定向、身份验证等),这也可能涉及多个断开连接/重新连接,因为HTTP是无状态协议,与大多数其他协议一样,不依赖于持久连接。因此,我能想到的实现这一点的唯一方法是将
Intercept
组件附加到
TIdHTTP.Intercept
属性,然后在交换HTTP消息时手动解析它们

  • 1事实上,这并不完全正确。有一个
    TIdHTTP.OnHeadersAvailable
    事件,该事件至少在读取HTTP响应头之后和读取HTTP响应正文之前触发。因此,如果您不关心头的计时,至少可以使用该事件开始计时主体数据的接收。然后在退出时停止计时。对于每个需要
    TIdHTTP
    重复请求的多步骤,您应该获得一个新的
    OnHeadersAvailable
    事件,可用于重置计时器。这样的话,你只会得到最后的回应

但是,请注意,
ReceiveTimeout
是一个每字节超时,因此另一种方法可能是使用自定义的
TStream
(或Indy的
TIdEventStream
)将HTTP响应数据接收到,然后您可以通过覆盖其
Write()
方法来确定对该流的各个写入之间的持续时间(或使用
OnWrite
事件)。

在开始请求时启动TStopWatch,在请求完成时停止。请参阅文档:。看起来很简单,我肯定错过了您问题中的某些内容……是的,我也可以使用GetTIckCount或其他方法来完成此操作。:-)我需要找到一个点来测量连接时间——而获取整个CONNECT+send+receiveyes,事件应该足以作为主要原因(获取超时属性的值),但我甚至可能会研究拦截器的解析。很好的输入,谢谢!