OkHttp 的启动和停止事件是什么
readTimeout
?
我最初的想法(现在我怀疑是天真的)是读取超时时钟会:
来自 OkHttp 文档:
读取超时适用于 TCP 套接字和单个读取 IO 操作,包括响应源
我从这个描述中得知,
readTimeout
“应用于”不止一种情况:
但这并没有明确告诉我每个上下文中超时的开始和停止事件。也许作者认为信息是如此明显,以至于没有必要陈述它。然而,这对我来说并不明显,因此这个问题。
谷歌搜索答案找到网页“OkHttp超时快速指南”,其中提供了以下对
readTimeout
的描述:
从客户端和目标主机成功建立连接的那一刻起,应用读取超时。
如果这是真的,则意味着
readTimeout
也适用于连接后发生的写入请求。我发现这在 HTTP 客户端超时的上下文中令人困惑:我希望此类超时与 HTTP 级别的事件保持一致。
并且:
它定义了等待服务器响应时两个数据包之间不活动的最长时间。
“数据包”如TCP 段 或如IP 数据包?
无论哪种方式,如果这是真的,那么就意味着
readTimeout
违反了抽象障碍。我不需要根据每只背着小东西的乌龟到达之间的延迟来设置 HTTP 超时。
但我们假设这是真的。 “两个数据包之间不活动”?当等待服务器响应时,这两个数据包的first是什么?它是隐含地发送到服务器的请求的“最后一个”数据包吗?或者是“响应”(记住上下文:HTTP 客户端)在这里以不同的、较低级别的含义使用,而不是“HTTP 响应”?我只能猜测了。 回到我原来的问题,那么:
readTimeout
的开始和停止事件是什么?
我有一个关于writeTimeout
的类似问题,我想我可以在一个单独的问题中提出。回答时请同时盖住
readTimeout
和writeTimeout
。结束事件是向应用程序返回 1 个或更多字节(无超时)或超时持续时间已过(超时)。
对于 HTTP/1,此功能由操作系统在其 TCP 堆栈中实现。当应用程序代码想要读取数据(HTTP 响应元数据或其主体的任何字节)时,会在套接字上配置此超时。
对于 HTTP/2,此功能是在 OkHttp 的响应元数据和正文的复用代码中实现的。
此超时对于因应用程序层或网络问题而停止的 HTTP 调用失败最有用。例如,如果数据包不流动,它可以用于失败。
我更喜欢调用超时功能,它适用于整个 HTTP 调用。