setReadTimeout()和setConnectTimeout()之间有什么区别?

job*_*bin 5 java connection timeout http

我很抱歉,如果这听起来是一个非常愚蠢的问题,但谷歌搜索相当一段时间没有得出这个问题的答案.

我正在尝试为我正在使用的服务器设置连接的超时,我正在使用HttpComponentsClientHttpRequestFactory并尝试按如下方式设置超时:

clientHttpRequestFactory.setConnectTimeout(timeout);
Run Code Online (Sandbox Code Playgroud)

但是,我看到还有另一种方法setReadTimeout(),所以我不确定在从服务器获得响应之前使用哪个方法来设置超时.关于HttpComponentsClientHttpRequestFactory的文档在这方面不是很清楚.

有人可以解释一下这两种方法的区别吗?

编辑:我想的是,如果网络不可靠,我应该设置,setConnectTimeout()并且setReadTimeout()应该在服务器不可靠时设置.那是对的吗?

Kay*_*man 13

ConnectTimeout是创建连接的超时.假设你有一个不可靠的服务器,你想在告诉用户"出现问题"之前只等待15秒.

ReadTimeout是连接时的超时,您被阻止,read()如果读取块超过,则希望获得异常timeout.

例如,现实生活中的例子是检查特定网络站点是否已启动.唯一可靠的测试方法是尝试连接它.您可能能够连接到它,它可能会让您拒绝连接,或者它会因网络问题而挂起连接.这就是连接超时很方便的地方.

读取超时在应用程序协议中非常有用,在该应用程序协议中,客户端需要经常发送"心跳",让他们知道它们仍然连接(如果服务器定期写回客户端,则不需要,但情况并非总是如此).您将使用心跳时间的读取超时(加上一些额外的),如果超时则可以假设客户端已断开连接并关闭套接字.