簡體   English   中英

DefaultHttpClient 的單例實例超時

[英]Timeouts with singleton instance of DefaultHttpClient

我將DefaultHttpClient單例實例與PoolingClientConnectionManager結合使用,以多線程方式執行相當數量(每秒多個)的 HTTP 操作。 我的代碼基本上是:

final HttpParams httpClientParams = new BasicHttpParams();
httpClientParams.setParameter("http.protocol.version", HttpVersion.HTTP_1_1);
HttpConnectionParams.setConnectionTimeout(httpClientParams, 700);
HttpConnectionParams.setSoTimeout(httpClientParams, 700);
DefaultHttpClient client = new DefaultHttpClient(poolingClientConnectionManager, httpClientParams);

然后我將從多個線程並行訪問client對象。

我的問題是,超時沒有得到尊重,並且我的 HTTP 請求需要比指定的 700 毫秒長得多的時間。

  • 像我上面那樣在客戶端上設置超時是否安全?
  • 許多並行請求使用DefaultHttpClient的單例實例是否安全?
  • 像我上面那樣在客戶端上設置超時是否安全?

是的,這是安全的。 但是,HttpClient 級別的參數代表所有請求繼承的默認設置。 不應在運行時干預這些設置。 通常最好使用請求級別參數來配置單個請求。

  • 對許多並行請求使用 DefaultHttpClient 的單例實例是否安全?

不僅安全,而且強烈建議。 通過共享相同的 HttpClient 實例,可以通過重用共享的持久連接池來更有效地執行單個請求。

還請確保您對超時行為的期望是正確的。 超時值表示兩個連續i/o 操作之間的最長不活動時間,而不是最大總請求執行時間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM