HttpURLConnection超时默认值
我似乎遇到了一些tcp请求有时会“卡住”的问题,比如它正在等待某些响应,但连接已被“切断”,因此响应将永远不会到来。 HttpURLConnection的预期行为是否具有默认超时? 是否设置了合理的默认设置,以便我无法在默认情况下进入这种奇怪的“挂起”状态?
出现HttpURLConnection的“默认”超时为零,这意味着“没有超时”。
不幸的是,根据我的经验,使用这些默认设置似乎会导致状态不稳定,具体取决于您与服务器的连接会发生什么。 如果您使用HttpURLConnection
并且未显式设置(至少读取)超时,则您的连接可能会进入永久陈旧状态。 默认情况下。 所以总是将setReadTimeout
设置为“something”,否则你可能会孤立连接(可能是线程,具体取决于你的app运行方式)。
从试验和错误看,调用setConnectTimeout
不是必需的,因为套接字本身似乎内置了2分钟的“连接超时”(至少在OS X中)。
您还可以通过调整系统属性为超时设置“全局默认值”。
修复/预测:始终设置readTimeout(即使非常大),或使用允许您设置SO_KEEPALIVE的其他客户端。 默认情况下,如果没有它,您的程序将“永远”挂起。
- Java HttpURLConnection.getInputStream但获得401 IOException
- Tomcat,HTTP Keep-Alive和Java的HttpsUrlConnection
- 为什么我收到此错误提前结束文件?
- 如何使用HttpURLConnection和Java中的CookieManager为每个连接使用不同的cookie
- 下载时限制带宽
- Android:如何使用HttpsURLConnection以编程方式登录网页
- validationCXF HttpAsyncClient使用use.async.http.conduit上下文属性
- 用于POST请求的HttpURLConnection App Engine Java示例不起作用
- 我可以全局设置HTTP连接的超时吗?