HttpURLConnection 超时默认值

HttpURLConnection timeout defaults

我似乎遇到了一些 tcp 请求有时会收到 "stuck" 的问题,就像它正在等待一些响应但连接已经 "severed" 所以响应永远不会到来。这是具有默认超时的 HttpURLConnection 的预期行为吗?是否设置了合理的默认值,以便默认情况下我无法进入这种奇怪的 "hung" 情况?

似乎 HttpURLConnection 的“默认”超时为零,这意味着“无超时”。

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

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

您还可以通过调整 system properties.

为超时设置“全局默认值”

Fix/prognosis:始终设置 readTimeout(即使非常大),或使用允许您设置 的不同客户端。没有这些的默认值会导致线程在没有它的情况下“永远”挂起(when/if 他们进行读取),或者在陈旧的套接字上永远停留...