2013-10-13 10 views

Odpowiedz

19

Te ustawienia sterują rozmiarem puli połączeń.

  • setMaxTotal(max) Definiuje limit połączenia zewnętrznego dla puli połączeń.
  • setMaxPerRoute(max) definiuje limit połączenia dla jednej trasy HTTP. W prostych przypadkach można to zrozumieć jako limit docelowego hosta. Pod maską rzeczy są nieco bardziej interesujące: HttpClient utrzymuje kilka obiektów HttpRoute, które reprezentują łańcuch hostów, takich jak proxy1 -> proxy2 -> targetHost. Połączenia są łączone w zależności od trasy. W prostych przypadkach, gdy używasz domyślnego mechanizmu budowania trasy i nie zapewniasz obsługi serwerów proxy, twoje trasy prawdopodobnie będą zawierały tylko host docelowy, więc limit puli połączeń na trasie staje się praktycznie limitem na hosta.

Przykład:

Załóżmy, że masz setMaxPerRoute(5) i setMaxTotal(20). Oznacza to, że możesz jednocześnie używać maksymalnie 5 połączeń dla każdego hosta docelowego: 5 połączeń z witryną google.com, kolejne 5 połączeń z oracle.com i tak dalej. Całkowita liczba otwartych połączeń nie może jednak przekroczyć 20, niezależnie od liczby hostów, z którymi się komunikujesz.

+0

Dziękuję, to było bardzo pomocne. Czy istnieje ograniczenie do maxPerRoute? Będę starał się zażądać wielu adresów URL z tej samej strony internetowej (dziesiątki tysięcy) przy użyciu około 150 wątków. – james

+1

Nie w samym HttpClient, to całkiem dobrze, że klient ma 150 połączeń z jednym hostem. Należy jednak pamiętać, że serwer może nie zezwalać na tak wiele połączeń z jednego klienta, który zależy od konfiguracji serwera. – Jk1

+0

Przepraszam, że Cię buguję, ale czy sam używasz HttpComponents? – james

Powiązane problemy