Jaka jest różnica między setConnectionTimeout, setSoTimeout i " http.connection-manager.timeout " w Apache HttpClient API

Jaka jest różnica między tymi trzema (oznaczonymi jako komentarze):

MultiThreadedHttpConnectionManager connManag =  new MultiThreadedHttpConnectionManager();
HttpConnectionManagerParams managParams = connManag.getParams();

managParams.setConnectionTimeout(connectiontimeout); // 1
managParams.setSoTimeout(sotimeout); //2

HttpMethodBase baseMethod = null;

try {
  HttpClient client = new HttpClient(connManag);
  client.getParams().setParameter("http.connection-manager.timeout", poolTimeout); //3

  baseMethod = new GetMethod(…);
  int statusCode = client.executeMethod(…);

  …
}
catch (ConnectTimeoutException cte ){
  //Took too long to connect to remote host
}
catch (SocketTimeoutException ste){
  //Remote host didn’t respond in time
}
catch (Exception se){
  //Some other error occurred
}
finally {
  if (baseMethod != null)
    baseMethod.releaseConnection();
}

1. setConnectionTimeout - jeśli określa limit czasu do nawiązania połączenia.

2. setSoTimeout - jeśli określa okres nieaktywności lub różnicę czasu między dwoma kolejnymi pakietami,

To co robi poniższy:

3. "http.connection-manager.timeout"

Author: Prateek, 2013-08-12

4 answers

Na najniższym poziomie HTTP to gniazdo TCP. Kiedy więc żądasz adresu URL i otrzymujesz odpowiedź, na niższym poziomie tworzone jest gniazdo klienta, które ustanawia połączenie ze zdalnym gniazdem serwera, wysyła niektóre dane i odbiera odpowiedź.

  • SetConnectionTimeout : klient próbuje połączyć się z serwerem. Oznacza to czas, jaki upłynął przed nawiązaniem połączenia lub odpowiedzią serwera na żądanie połączenia.

  • SetSoTimeout : po założeniu połączenie, Gniazdo klienta czeka na odpowiedź po wysłaniu żądania. Jest to czas, jaki upłynął od wysłania żądania przez Klienta do serwera, zanim serwer odpowie. Należy pamiętać, że nie jest to to samo co HTTP Error 408, które serwer wysyła do klienta. Innymi słowy jego maksymalna nieaktywność okresowa pomiędzy dwoma kolejnymi pakietami danych docierającymi po stronie klienta po nawiązaniu połączenia.

  • Http.connection-manager.timeout : MultiThreadedHttpConnectionManager używa puli połączenia HTTP . Ma ustawione dla niego maksymalne i minimalne wartości na host. Jeśli wszystkie połączenia dla danego hosta osiągną wartość maksymalną, żądanie nowego połączenia dla tego samego hosta będzie musiało poczekać, aż jedno z istniejących połączeń stanie się wolne. Parametr ten określa czas, jaki upłynął, kiedy zostało wykonane żądanie połączenia i zanim HttpConnectionManager zwróciło połączenie.

 56
Author: Santosh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-20 07:38:29

Ten schemat sekwencji może pomóc.

schemat sekwencji dla timeoutów

 9
Author: Maria Ines Parnisari,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-15 21:12:50

Szczegółowe wyjaśnienie znajduje się w Dokumentacja zarządzania połączeniami na stronie klienta Apache HTTP.

CoreConnectionPNames. SO_TIMEOUT= 'http. socket. timeout': definiuje limit czasu oczekiwania na dane (SO_TIMEOUT) w milisekundach, czyli limit czasu oczekiwania na dane lub, inaczej mówiąc, maksymalny okres bezczynności pomiędzy dwoma kolejnymi pakietami danych). Wartość zerowego limitu czasu jest interpretowana jako nieskończony limit czasu. Parametr ten oczekuje wartości typu java.lang.Liczba całkowita. Jeśli ten parametr nie jest ustawiony, operacje odczytu nie zostaną przerwane (nieskończony czas oczekiwania).

CoreConnectionPNames.CONNECTION_TIMEOUT= ' http.połączenie.timeout': określa limit czasu w milisekundach do momentu nawiązania połączenia. Wartość zerowego limitu czasu jest interpretowana jako nieskończony limit czasu. Parametr ten oczekuje wartości typu java.lang.Liczba całkowita. Jeśli ten parametr nie jest ustawiony, operacje connect nie zostaną przerwane (nieskończony czas oczekiwania).

Limit czasu Menedżera połączeń (http.connection-manager.timeout) - czas oczekiwania na połączenie z Menedżera połączeń / puli połączeń

Tylko dla przypomnienia

HttpParams httpParams = httpClient.getParams();
httpParams.setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, timeout * 1000);
httpParams.setParameter(CoreConnectionPNames.SO_TIMEOUT, timeout * 1000);

Jest alternatywnym sposobem na

HttpParams httpParams = httpClient.getParams();
HttpConnectionParams.setConnectionTimeout(httpParams, timeout * 1000);
HttpConnectionParams.setSoTimeout(httpParams, timeout * 1000);

(więcej szczegółów tutaj )

 6
Author: Aniket Thakur,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-27 10:27:31

W prostych słowach:

  • connection out: limit czasu, na który aplikacja czeka podczas próby nawiązania połączenia z serwerem i nie jest w stanie (adres jest nieprawidłowy, serwer jest wyłączony itp...)
  • Socket time out: limit czasu, na który aplikacja czeka po podłączeniu do serwera, ale nadal czeka na odpowiedź (opóźnienie może być spowodowane na przykład zawieszeniem serwera)
  • Connection manager time out: limit czasu oczekiwania żądania gdy jest w kolejce oczekującej na uwolnienie jednego z żądań w Puli. Innymi słowy, w HTTP mamy pulę połączeń o maksymalnym rozmiarze. Gdy aplikacja jest obciążona, pula może być pełna i każde nowe żądanie musi poczekać na zakończenie kolejnego żądania z puli.
 0
Author: user666,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-14 11:20:32