这是我用来创建多线程httpclient对象的代码。我试图在整个电路板上进行4秒的超时,因此如果没有任何事情发生4秒钟就会丢弃请求。我看到在300秒范围内的一些请求上执行时间非常长。我似乎无法弄清楚为什么会这样。有什么想法吗?
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 :(得分:0)
您设置的所有超时值仅尝试限制特定操作的时间,而不是请求的总时间。在某些情况下,超时根本不起作用。例如,如果IP被防火墙阻止,则连接超时无效。
我找到的唯一解决方案是在另一个线程中启动我的请求并自行计时。您可以使用ThreadPool和FutureTask。看看我对这个问题的回答,