httpclient超时?似乎可以让他们坚持下去

时间:2010-07-10 20:43:20

标签: java http httpclient

这是我用来创建多线程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);

1 个答案:

答案 0 :(得分:0)

您设置的所有超时值仅尝试限制特定操作的时间,而不是请求的总时间。在某些情况下,超时根本不起作用。例如,如果IP被防火墙阻止,则连接超时无效。

我找到的唯一解决方案是在另一个线程中启动我的请求并自行计时。您可以使用ThreadPool和FutureTask。看看我对这个问题的回答,

java native Process timeout