HttpClient
提供了各种“超时”设置,其中两个会稍微令我迷惑:
- responseTimeout:
发送请求后接收响应所需的时间
- ReadTimeoutHandler:
在一定时间内没有读取到任何数据时引发ReadTimeoutException异常
请问有人能够解释它们之间的关键区别吗?
通用场景-使用Spring React Web Client发出调用,此Web Client在底层使用HttpClient
:
- 与远程服务器建立连接>>> 我们在这里利用
ChannelOption.CONNECT_TIMEOUT_MILLIS
- TLS握手>>> 我们在这里使用
ReadTimeoutHandler
,对吗? - 发送请求
- ...等待...
- 接收响应>>> 在这里,哪个“超时”具有优先权:response还是read?
.secure(sslContextSpec -> sslContextSpec.sslContext(...)
,我发现只有.handshakeTimeout(..)
,说实话这更加令人困惑了...在https://github.com/reactor/reactor-netty/issues/1159上查看 - 我的理解是,应该是ReadTimeoutHandler
负责握手超时,你能否在这里详细说明一下? - ascetatcpClient.doOnConnected(conn -> conn .addHandlerLast(new ReadTimeoutHandler(readTimeout, TimeUnit.MILLISECONDS)))
,你所说的callback是指提供创建自定义ReadTimeoutHandler
的选项吗? - asceta