java - DefaultHttpClient 单例实例的超时

标签 java apache-httpclient-4.x

我将 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/

相关文章:

java - 房子强盗问题如何这样做

java - 在 RxJava 中等待多个异步调用完成

java - 使用 Http.Core 与 Http.Client 4 对话获取 ConnectionClosedException?

java - Apache Http Client 4 Form Post 多部分数据

java - CloseableHttpClient : will all exceptions go to retyHandler() if there's one?

java - 我该怎么做才能修复 java.lang.StringIndexOutOfBoundsException?

java - 无法获取 Java 线程本地对象中存储的变量的整数值

java - Scala 的类和对象的问题

java - Java中Http连接池中的连接驱逐策略

java - Spring Boot AsyncRestTemplate SSLSocketFactory