setDefaultMaxPerRoute和setMaxTotal在HttpClient中的含义是什么?

时间:2015-06-07 04:16:25

标签: java apache-httpclient-4.x

我在我的一个项目中使用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

1 个答案:

答案 0 :(得分:11)

有些参数在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