HttpURLConnection超时默认值


问题内容

我似乎有时会遇到一些tcp请求被“卡住”的麻烦,就像它正在等待一些响应,但连接已被“切断”,因此响应永远不会到来。这是具有默认超时的HttpURLConnection的预期行为吗?是否设置了明智的默认设置,以便默认情况下我无法进入这种奇怪的“挂起”情况?


问题答案:

出现HttpURLConnection的“默认”超时为零,表示“无超时”。

不幸的是,根据我的经验,根据您与服务器的连接情况,使用这些默认值可能会导致不稳定状态。如果您使用HttpURLConnection且未明确设置(至少读取)超时,则您的连接可能会进入永久性的陈旧状态。默认。因此,请始终将其设置setReadTimeout为“
something”,否则您可能会孤立连接(以及可能取决于应用程序的运行方式的线程)。

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

您还可以通过调整系统属性来为超时设置“全局默认值” 。

修复/预后:始终设置一个readTimeout(即使非常大),或者使用其他客户端来设置SO_KEEPALIVE。没有这些默认值会导致没有它的线程“永远”挂起。