具有DefaultHttpClient的单例实例的超时

时间:2012-11-08 09:48:03

标签: java apache-httpclient-4.x

我正在使用DefaultHttpClient singleton 实例与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的单例实例是否安全?

1 个答案:

答案 0 :(得分:2)

  • 如上所述,在客户端上设置超时是否安全?

是的,这是安全的。但是,HttpClient级别参数表示所有请求继承的默认设置。不应该在运行时插入这些设置。通常最好使用请求级别参数来配置单个请求。

  • 对许多并行请求使用DefaultHttpClient的单例实例是否安全?

不仅安全,而且强烈建议。通过共享相同的HttpClient实例,可以通过重用共享的持久连接池来更有效地执行各个请求。

还请确保您对超时行为的期望是正确的。超时值表示两个连续 i / o操作之间的最大不活动时间,而不是最大总请求执行时间。

相关问题