OkHttp readTimeout 启动和停止事件?

问题描述 投票:0回答:1

OkHttp 的启动和停止事件是什么

readTimeout

我最初的想法(现在我怀疑是天真的)是读取超时时钟会:

  • 开始当HTTP客户端完成向服务器写入(发送)请求时
  • 停止当HTTP客户端完成从服务器读取(接收)响应时

来自 OkHttp 文档

读取超时适用于 TCP 套接字和单个读取 IO 操作,包括响应源

我从这个描述中得知,

readTimeout
“应用于”不止一种情况:

  • 到一个对象(TCP套接字)
  • 操作,复数(“单个读取 IO 操作,包括响应源”)

但这并没有明确告诉我每个上下文中超时的开始和停止事件。也许作者认为信息是如此明显,以至于没有必要陈述它。然而,这对我来说并不明显,因此这个问题。

谷歌搜索答案找到网页“OkHttp超时快速指南”,其中提供了以下对

readTimeout
的描述:

从客户端和目标主机成功建立连接的那一刻起,应用读取超时。

如果这是真的,则意味着

readTimeout
也适用于连接后发生的写入请求。我发现这在 HTTP 客户端超时的上下文中令人困惑:我希望此类超时与 HTTP 级别的事件保持一致。

并且:

它定义了等待服务器响应时两个数据包之间不活动的最长时间。

“数据包”如TCP 段 或如IP 数据包

无论哪种方式,如果这是真的,那么就意味着

readTimeout
违反了抽象障碍。我不需要根据每只背着小东西的乌龟到达之间的延迟来设置 HTTP 超时。

但我们假设这是真的。 “两个数据包之间不活动”?当等待服务器响应时,这两个数据包的first是什么?它是隐含地发送到服务器的请求的“最后一个”数据包吗?或者是“响应”(记住上下文:HTTP 客户端)在这里以不同的、较低级别的含义使用,而不是“HTTP 响应”?我只能猜测了。 回到我原来的问题,那么:

readTimeout

的开始和停止事件是什么?

我有一个关于

writeTimeout

的类似问题,我想我可以在一个单独的问题中提出。回答时请同时盖住

readTimeout
writeTimeout
    

okhttp
1个回答
0
投票

结束事件是向应用程序返回 1 个或更多字节(无超时)或超时持续时间已过(超时)。

对于 HTTP/1,此功能由操作系统在其 TCP 堆栈中实现。当应用程序代码想要读取数据(HTTP 响应元数据或其主体的任何字节)时,会在套接字上配置此超时。

对于 HTTP/2,此功能是在 OkHttp 的响应元数据和正文的复用代码中实现的。

此超时对于因应用程序层或网络问题而停止的 HTTP 调用失败最有用。例如,如果数据包不流动,它可以用于失败。

我更喜欢调用超时功能,它适用于整个 HTTP 调用。

© www.soinside.com 2019 - 2024. All rights reserved.