2013-10-13 47 views

답변

19

이 설정은 연결 풀 크기를 제어합니다.

  • setMaxTotal(max)은 conneciton 풀에 대한 초과 연결 제한을 정의합니다.
  • setMaxPerRoute(max)은 HTTP 경로 하나당 연결 제한을 정의합니다. 단순한 경우에는 이것을 대상 호스트 당 제한으로 이해할 수 있습니다. 두드러기가 좀 더 재미 있습니다 : HttpClientproxy1 -> proxy2 -> targetHost과 같이 각각 호스트 체인을 나타내는 HttpRoute 개체를 유지합니다. 연결은 경로별로 풀링됩니다. 간단한 route-building 메커니즘을 사용하고 proxy suport를 제공하지 않는 간단한 경우, 경로에 대상 호스트 만 포함되므로 경로 별 연결 풀 제한이 효과적으로 호스트 별 제한이됩니다.

예 :

setMaxPerRoute(5)setMaxTotal(20) 있다고 가정합시다. 즉, 모든 대상 호스트에 대해 최대 5 개의 연결 (google.com을 통한 연결 5 개, oracle.com과 5 개의 연결 등)을 동시에 사용할 수 있습니다. 그러나 연결중인 호스트의 수에 관계없이 열린 연결의 총량은 20을 초과 할 수 없습니다.

+0

감사합니다. 매우 도움이되었습니다. maxPerRoute에 제한 사항이 있습니까? 약 150 개의 스레드를 사용하여 동일한 웹 사이트 (수만)에서 많은 URL을 요청하려고합니다. – james

+1

HttpClient 자체가 아니라 클라이언트가 단일 호스트에 150 개의 연결을 가지고 있어도 괜찮습니다. 그러나 서버는 서버 구성에 따라 단일 클라이언트에서 너무 많은 연결을 허용하지 않을 수도 있습니다. – Jk1

+0

불편을 끼쳐 드려 죄송 합니다만 HttpComponents를 직접 사용하십니까? – james