【问题标题】:What does setDefaultMaxPerRoute and setMaxTotal mean in HttpClient?HttpClient 中的 setDefaultMaxPerRoute 和 setMaxTotal 是什么意思?
【发布时间】:2015-06-07 04:16:24
【问题描述】:

我在我的一个项目中使用 Apache HttpClient。我也在使用PoolingHttpClientConnectionManager 以及我的 HttpClient。

我很困惑这些属性是什么意思。我尝试浏览代码中的文档,但我没有看到围绕这些变量的任何文档,因此无法理解。

  • setMaxTotal
  • setDefaultMaxPerRoute
  • setConnectTimeout
  • setSocketTimeout
  • setConnectionRequestTimeout
  • setStaleConnectionCheckEnabled

以下是我在代码中的使用方式:

RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(5 * 1000).setSocketTimeout(5 * 1000)
        .setStaleConnectionCheckEnabled(false).build();
PoolingHttpClientConnectionManager poolingHttpClientConnectionManager = new PoolingHttpClientConnectionManager();
poolingHttpClientConnectionManager.setMaxTotal(200);
poolingHttpClientConnectionManager.setDefaultMaxPerRoute(20);

CloseableHttpClient httpClientBuilder = HttpClientBuilder.create()
        .setConnectionManager(poolingHttpClientConnectionManager).setDefaultRequestConfig(requestConfig)
        .build();

谁能解释一下这些属性,以便我可以理解并决定我应该在那里输入什么值。另外,除了如上所示,我还应该使用其他属性来获得更好的性能吗?

我正在使用 http-client 4.3.1

【问题讨论】:

  • 好吧,这怎么可能太宽泛了。我要问的问题应该有单行答案?

标签: java apache-httpclient-4.x


【解决方案1】:

部分参数说明在http://hc.apache.org/httpclient-3.x/preference-api.html

必须从源头收集其他信息。

  • setMaxTotal

所有路由允许的最大连接数。

  • setDefaultMaxPerRoute

调用 setMaxPerRoute 时未指定的路由允许的最大连接数。提前知道路线时使用 setMaxPerRoute,不知道时使用 setDefaultMaxPerRoute。

  • setConnectTimeout

在抛出超时异常之前等待与远程服务器建立连接的时间。

  • setSocketTimeout

在抛出超时异常之前等待服务器响应各种调用的时间。详情请见http://docs.oracle.com/javase/1.5.0/docs/api/java/net/SocketOptions.html#SO_TIMEOUT

  • setConnectionRequestTimeout

尝试从连接池中检出连接时,在引发异常之前等待多长时间(例如,如果所有连接都被检出,则连接池不会立即返回)。

  • setStaleConnectionCheckEnabled

可以以潜在的 IOExceptions 为代价禁用以稍微提高性能。见http://hc.apache.org/httpclient-3.x/performance.html#Stale_connection_check

【讨论】:

  • 感谢您的帮助。我理解离开setDefaultMaxPerRoute 的所有要点。我只对routes 部分感到困惑。这里的路由是什么意思?
  • 它是一个 HttpRoute 实例,在hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/org/… 上更详细地定义,它指定了一个主机名或地址。例如,当您知道某个主机将从大量连接中受益,但您不想允许与所有其他主机建立大量连接时,可以使用此方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
  • 2023-04-03
  • 1970-01-01
  • 2011-08-12
  • 2017-06-11
相关资源
最近更新 更多