【问题标题】:What is the difference between setReadTimeout() and setConnectTimeout()?setReadTimeout() 和 setConnectTimeout() 有什么区别?
【发布时间】:2016-02-02 11:54:10
【问题描述】:

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

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

clientHttpRequestFactory.setConnectTimeout(timeout);

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

谁能解释一下这两种方法的区别?

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

【问题讨论】:

标签: java http connection timeout


【解决方案1】:

ConnectTimeout 是创建连接的超时时间。假设您有一个不可靠的服务器,并且您只想等待 15 秒,然后告诉用户“出了点问题”。

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

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

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

【讨论】:

  • 为了理解连接/读取超时,我指的是HTTP-Session-Flow。然后检查您的答案,除了最后一段之外,该答案已清除。所以通过 readTimeout 你的意思是请求响应之间的超时?这也可以通过暂时阻止请求来使用像查尔斯这样的任何工具来检查这种情况吗??
猜你喜欢
  • 2010-10-02
  • 2011-12-12
  • 2010-09-16
  • 2012-03-14
  • 2012-02-06
  • 2011-02-25
  • 2011-11-22
  • 2015-03-26
  • 2013-08-19
相关资源
最近更新 更多