HttpURL连接超时默认值

2022-09-02 03:15:22

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


答案 1

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

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

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

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

修复/预后:始终设置一个 readTimeout(即使非常大),或使用允许您设置SO_KEEPALIVE的其他客户端。没有这些的默认值会导致线程“永远”挂起而没有它(当/如果它们进行读取时),或者过时的套接字永远停留在周围......


答案 2

推荐