2010-07-10 51 views
1

這裏是我用來創建我的多線程httpclient對象的代碼。我試圖在整個板子上有4秒的超時時間,所以如果沒有任何事情發生4秒鐘來放棄請求。我看到300秒範圍內的一些請求的執行時間非常長。我似乎無法弄清楚爲什麼會發生這種情況。有任何想法嗎?httpclient超時?可以似乎讓他們堅持

HttpParams httpParams = new BasicHttpParams(); 
    HttpConnectionParams.setConnectionTimeout(httpParams, 4000); 
    HttpConnectionParams.setSoTimeout(httpParams, 4000); 

    // set request params 

    httpParams.setParameter("http.protocol.cookie-policy", CookiePolicy.BROWSER_COMPATIBILITY); 
    httpParams.setParameter("http.useragent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"); 
    httpParams.setParameter("http.protocol.wait-for-continue", 4000); 

    SchemeRegistry schemeRegistry = new SchemeRegistry(); 
    schemeRegistry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80)); 

    ClientConnectionManager cm = new ThreadSafeClientConnManager(httpParams,schemeRegistry); 
    HttpClient httpClient = new DefaultHttpClient(cm, httpParams); 

回答

0

所有超時值僅設置儘量限制時間進行具體操作,請求不是總時間。在某些情況下,超時根本不起作用。例如,如果IP被防火牆阻止,則連接超時將不起作用。

我發現的唯一解決方案是在不同的線程中啓動我的請求,並自己將其發送出去。您可以爲此使用ThreadPool和FutureTask。看到我對這個問題的回答,

java native Process timeout