Czy ktoś może mi wyjaśnić, co robią setMaxPerRoute(max)
i setMaxTotal(max)
w odniesieniu do HttpComponents PoolingHttpClientConnectionManager?HttpComponents PoolingHttpClientConnectionManager maxPerRoute i maxTotal?
7
A
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ówHttpRoute
, które reprezentują łańcuch hostów, takich jakproxy1 -> 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.
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. – jamesNie 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
Przepraszam, że Cię buguję, ale czy sam używasz HttpComponents? – james