Netty - connectTimeoutMillis 与 ReadTimeoutHandler

vgo*_*ort 6 java connection-timeout netty

来自 Netty API 文档

connectTimeoutMillis = "以毫秒为单位的连接超时。如果禁用,则为 0。"

ReadTimeoutHandler = 在一段时间内没有读取数据时引发 ReadTimeoutException。

从客户的角度来看,我对上述内容的解释是否正确?

客户端将尝试连接到主机最多“connectTimeoutMillis”。如果建立了连接,并且未将 ReadTimeoutHandler 添加到管道中,则通道可以无限期地等待响应。如果将 ReadTimeoutHandler 添加到管道中,则一旦 timeoutSeconds 过去,将引发 ReadTimeoutException。

一般来说,我只想尝试连接到主机最多 'x' 秒,但如果通过网络发送请求,我想等待最多 'y' 秒的响应。如果它影响/影响答案,则客户端是 Netty,但服务器不是。

跟进:ReadTimeoutHandler 上的 timeoutSeconds 是读取连续字节之间的超时,还是整个请求/响应的超时?示例:如果 timeoutSeconds 是 60,并且每 59 秒读取一个字节(总共 1024 个字节),那么整个响应会在 60416 秒内成功读取,还是会因为总经过时间超过 60 秒而失败?

use*_*421 1

  1. 是的,您已经正确识别了连接超时和读取超时之间的区别。请注意,无论任何文档可能有相反的说法,默认或零连接超时意味着大约 60-70 秒,而不是无穷大,并且您只能使用连接超时参数来减少默认值,而不是增加默认值。

  2. 读取超时从调用 read() 时开始,到超时或数据到达时结束。这是 read() 可能阻塞等待第一个字节到达的最长时间。它不会在单次调用中再次阻塞。