HttpURLConnection超时默认值

时间:2017-07-19 19:43:28

标签: java httpurlconnection

我似乎遇到了一些tcp请求出现问题"卡住"有时,就像它正在等待一些回应但是连接已被切断"所以回应永远不会到来。 HttpURLConnection的预期行为是否具有默认超时?是否有合理的默认设置,以便我无法进入这个奇怪的"挂"情况默认情况下?

1 个答案:

答案 0 :(得分:14)

显示HttpURLConnection的“默认”超时为零,表示“没有超时”。

不幸的是,根据我的经验,使用这些默认设置似乎会导致状态不稳定,具体取决于您与服务器的连接发生的情况。如果您使用HttpURLConnection并且未明确设置(至少读取)超时,则您的连接可能会进入永久陈旧状态。默认情况下。因此,始终将setReadTimeout设置为“某事”,或者您可能孤立连接(可能还有线程,具体取决于您的应用运行方式)。

从试验和错误看来,调用setConnectTimeout不是必需的,因为套接字本身似乎内置了2分钟的“连接超时”(至少在OS X中)。

您还可以通过调整system properties为超时设置“全局默认值”。

修复/预测:始终设置readTimeout(即使非常大),或使用允许您设置SO_KEEPALIVE的其他客户端。默认情况下,如果没有它,您的程序将“永远”挂起。