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

时间:2015-11-02 14:48:46

标签: java http connection timeout

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

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

clientHttpRequestFactory.setConnectTimeout(timeout);

但是,我发现还有另一种方法setReadTimeout(),所以我不确定在从服务器获得响应之前用哪个方法设置超时是正确的。 HttpComponentsClientHttpRequestFactory上的文档对此并不十分清楚。

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

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

1 个答案:

答案 0 :(得分:11)

ConnectTimeout是创建连接的超时时间。让我们假设你有一个不可靠的服务器,你只想等待15秒才告诉用户"出了什么问题"。

ReadTimeout是您建立连接时的超时,您在read()上被阻止,并且如果读取的阻止超过timeout,则您希望获得异常。< / p>

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

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