[英]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 級別的參數代表所有請求繼承的默認設置。 不應在運行時干預這些設置。 通常最好使用請求級別參數來配置單個請求。
不僅安全,而且強烈建議。 通過共享相同的 HttpClient 實例,可以通過重用共享的持久連接池來更有效地執行單個請求。
還請確保您對超時行為的期望是正確的。 超時值表示兩個連續i/o 操作之間的最長不活動時間,而不是最大總請求執行時間。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.