當您使用HttpClientBuilder HttpClient的實例的實例,可以傳遞的RequestConfig一個實例給構建器,這inturn接受2個參數。
SocketTimeout
- 定義套接字超時(SO_TIMEOUT),以毫秒爲單位,即等待數據的超時值,或者換句話說,兩個連續數據包之間的最大非活動時間)。
ConnectTimeout
- 確定連接建立之前的超時時間(以毫秒爲單位)。超時值爲零被解釋爲無限超時。
ConnectionRequestTimeout
- 返回從連接管理器請求連接時使用的超時時間(以毫秒爲單位)。超時值爲零被解釋爲無限超時。
你要找的是SocketTimeout。
RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(CONNECTION_TIMEOUT)
.setConnectionRequestTimeout(CONNECTION_TIMEOUT).setSocketTimeout(SOCKET_TIMEOUT).build();
httpClient = HttpClientBuilder.create().disableAutomaticRetries().setDefaultRequestConfig(requestConfig)
.setConnectionManager(poolingHttpClientConnectionManager).disableRedirectHandling().build();
你可以看看ConnectionKeepAliveStrategy。 page
嗨,謝謝你的回覆。對不起,我想我沒有讓自己清楚。 我試過你的解決方案與套接字超時,但它不會停止連接。 基本上,我將通過該連接接收一個恆定的數據流,但我希望能夠在用戶指定的時間(如10秒)後將其剪切。 – GreenApples53
@ GreenApples53好吧,我誤解了這個問題。你能否看到ConnectionKeepAliveStratergy是否有幫助?在從服務器收到第一個響應之後,您可以使用保持活動超時來處理此問題。在收到響應之前,您可以使用套接字超時來實現此目的。所以我想你需要混合兩者 –
我目前實現了一個解決方案,它產生一個計時器線程,在指定的時間後簡單地中止連接。我不確定這是否是最佳做法,但它似乎對我有用。你認爲這會有什麼問題嗎?親切的問候 – GreenApples53