HttpURLConnection超时默认值

问题描述 投票:7回答:1

我似乎遇到了一些tcp请求有时被“卡住”的问题,比如它正在等待一些响应,但连接已被“切断”,因此响应永远不会到来。 HttpURLConnection的预期行为是否具有默认超时?是否设置了合理的默认设置,以便我无法默认进入这种奇怪的“挂起”状态?

java httpurlconnection
1个回答
14
投票

出现HttpURLConnection的“默认”超时为零,这意味着“没有超时”。

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.