HttpURLConnection 超时默认值
HttpURLConnection timeout defaults
我似乎遇到了一些 tcp 请求有时会收到 "stuck" 的问题,就像它正在等待一些响应但连接已经 "severed" 所以响应永远不会到来。这是具有默认超时的 HttpURLConnection 的预期行为吗?是否设置了合理的默认值,以便默认情况下我无法进入这种奇怪的 "hung" 情况?
似乎 HttpURLConnection 的“默认”超时为零,这意味着“无超时”。
不幸的是,根据我的经验,使用这些默认值似乎会导致不稳定的状态,具体取决于您与服务器的连接发生的情况。如果您使用 HttpURLConnection
并且没有明确设置(至少读取)超时,您的连接可能会进入永久失效状态。默认。因此,请始终将 setReadTimeout
设置为“某物”,否则您可能会孤立连接(并且可能是线程,具体取决于您的应用程序的运行方式)。
从反复试验来看,似乎不需要调用 setConnectTimeout
,因为套接字本身似乎内置了 2 分钟的“连接超时”(至少在 OS X 中) .
您还可以通过调整 system properties.
为超时设置“全局默认值”
Fix/prognosis:始终设置 readTimeout(即使非常大),或使用允许您设置 的不同客户端。没有这些的默认值会导致线程在没有它的情况下“永远”挂起(when/if 他们进行读取),或者在陈旧的套接字上永远停留...
我似乎遇到了一些 tcp 请求有时会收到 "stuck" 的问题,就像它正在等待一些响应但连接已经 "severed" 所以响应永远不会到来。这是具有默认超时的 HttpURLConnection 的预期行为吗?是否设置了合理的默认值,以便默认情况下我无法进入这种奇怪的 "hung" 情况?
似乎 HttpURLConnection 的“默认”超时为零,这意味着“无超时”。
不幸的是,根据我的经验,使用这些默认值似乎会导致不稳定的状态,具体取决于您与服务器的连接发生的情况。如果您使用 HttpURLConnection
并且没有明确设置(至少读取)超时,您的连接可能会进入永久失效状态。默认。因此,请始终将 setReadTimeout
设置为“某物”,否则您可能会孤立连接(并且可能是线程,具体取决于您的应用程序的运行方式)。
从反复试验来看,似乎不需要调用 setConnectTimeout
,因为套接字本身似乎内置了 2 分钟的“连接超时”(至少在 OS X 中) .
您还可以通过调整 system properties.
为超时设置“全局默认值”Fix/prognosis:始终设置 readTimeout(即使非常大),或使用允许您设置