2017-07-19 202 views
1

我似乎遇到了一些tcp請求有時會「卡住」的問題,比如它正在等待某個響應,但連接已被「切斷」,因此響應永遠不會到來。 HttpURLConnection的預期行爲是否具有默認超時?是否設置了合理的默認值,以便默認情況下無法進入這種奇怪的「掛起」狀態?HttpURLConnection超時默認值

回答

0

出現HttpURLConnection的「默認」超時值爲零,表示「沒有超時」。

不幸的是,根據我的經驗,看起來使用這些默認值可能會導致不穩定的狀態,具體取決於連接到服務器時發生的情況。如果您使用HttpURLConnection並且未明確設置(至少讀取)超時,則您的連接可能會進入永久陳舊狀態。默認。因此,請始終將setReadTimeout設置爲「某些」,否則您可能會孤兒連接(可能還有線程,具體取決於您的應用運行方式)。

從反覆試驗中可以看出,調用setConnectTimeout並不是必需的,因爲套接字本身似乎內置了一個2分鐘的「連接超時」(至少在OS X中)。

您也可以通過調整system properties來設置超時的「全局默認值」。

修復/預測:總是設置一個readTimeout,或者使用不同的客戶端,讓您設置SO_KEEPALIVE