web-dev-qa-db-ja.com

HttpClientでsetDefaultMaxPerRouteとsetMaxTotalはどういう意味ですか?

私のプロジェクトの1つでApache HttpClientを使用しています。また、HttpClientとともにPoolingHttpClientConnectionManagerも使用しています。

私はこれらの特性が何を意味するのか混乱しています。コード内のドキュメントを調べてみましたが、これらの変数に関するドキュメントが見つからないため、理解できませんでした。

  • 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を使用しています

17
john

一部のパラメータは 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 を参照してください

14
Pace