我将 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 级别参数代表所有请求继承的默认设置。人们不应该在运行时干预这些设置。通常最好使用请求级别参数来配置单个请求。
- 对多个并行请求使用 DefaultHttpClient 的单例实例是否安全?
不仅安全,而且强烈建议。通过共享相同的 HttpClient 实例,可以通过重用持久连接的共享池来更有效地执行各个请求。
另请确保您对超时行为的期望是正确的。超时值表示两个连续 i/o 操作之间的最大不活动时间,而不是最大总请求执行时间。
关于java - DefaultHttpClient 单例实例的超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13286464/