很抱歉,这听起来像是一个很愚蠢的问题,但是在相当一段时间内仍无法搜索该问题的答案。

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

clientHttpRequestFactory.setConnectTimeout(timeout);

但是,我看到还有另一种方法setReadTimeout(),因此在从服务器获得响应之前,我不确定哪种方法可以用来设置超时。关于HttpComponentsClientHttpRequestFactory的文档对此并不十分清楚。

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

编辑:我当时想的是,如果网络不可靠,则应设置setConnectTimeout(),而当服务器不可靠时应设置setReadTimeout()。那是对的吗?

最佳答案

ConnectTimeout是创建连接的超时。假设您的服务器不可靠,并且您只想等待15秒,然后再告诉用户“某事不对劲”。
ReadTimeout是您建立连接时的超时,您在read()上受阻,并且如果读取的阻塞量超过timeout,则想获取异常。

现实生活中的示例例如是检查特定的网站是否已启动。唯一可靠的测试方法是尝试连接到它。您可能可以连接到它,它可能使您的连接被拒绝,或者由于网络问题而挂起。那是连接超时的地方。

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

10-08 06:32