Quelle est la différence entre setConnectionTimeout, setSoTimeout et " http.connexion-gestionnaire.délai d'attente " dans Apache HttpClient API

Quelle est la différence entre les trois (marqué comme Commentaires):

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 - s'il détermine le délai d'attente jusqu'à ce que la connexion est établie.

2. setSoTimeout - s'il détermine la période d'inactivité ou la différence de temps entre deux paquets consécutifs,

Alors Que fait le ci-dessous:

3. "http.connection-manager.timeout"

37
demandé sur Prateek 2013-08-12 14:38:23

4 réponses

Au niveau le plus bas, HTTP est le socket TCP. Ainsi, lorsque vous demandez une URL et obtenez une réponse, au niveau inférieur, un Socket client est créé qui établit la connexion au socket du serveur distant, envoie des données et reçoit une réponse.

  • SetConnectionTimeout : le Client tente de se connecter au serveur. Cela indique le temps écoulé avant que la connexion soit établie ou que le serveur réponde à la demande de connexion.

  • SetSoTimeout : Après avoir établi la connexion, le socket client attend une réponse après l'envoi de la demande. Il s'agit du temps écoulé depuis que le client a envoyé une demande au serveur avant que celui-ci ne réponde. Veuillez noter que ce n'est pas la même que HTTP Error 408 que le serveur envoie au client. En d'autres termes, sa période d'inactivité maximale entre deux paquets de données consécutifs arrivant côté client après l'établissement de la connexion.

  • Http.connexion-gestionnaire.délai d'attente : MultiThreadedHttpConnectionManager utilise un piscine des connexions HTTP . Il a des valeurs maximales et minimales par hôte défini pour cela. Si toutes les connexions pour un hôte particulier ont atteint la valeur maximale, la demande de nouvelle connexion pour le même hôte devra attendre que l'une des connexions existantes devienne libre. Ce paramètre indique le temps écoulé lorsqu'une demande de connexion a été effectuée et avant que HttpConnectionManager renvoie une connexion.

56
répondu Santosh 2015-08-20 07:38:29

Ce diagramme de séquence peut aider.

diagramme de séquence pour les délais d'attente

9
répondu Maria Ines Parnisari 2018-02-15 21:12:50

Une explication détaillée est fournie dans documentation de gestion des connexions sur le site client HTTP Apache.

CoreConnectionPNames. SO_TIMEOUT= 'http. socket. timeout': définit le délai d'attente du socket (SO_TIMEOUT) en millisecondes, qui est le délai d'attente pour les données ou, autrement dit, une période d'inactivité maximale entre deux paquets de données consécutifs). Une valeur de délai d'attente de Zéro est interprétée comme un délai d'attente infini. Ce paramètre attend une valeur de type Java.lang.Entier. Si ce paramètre n'est pas défini, les opérations de lecture ne expireront pas (délai infini).

CoreConnectionPNames.CONNECTION_TIMEOUT= ' http.connexion.timeout': détermine le timeout en millisecondes jusqu'à ce qu'une connexion soit établie. Une valeur de délai d'attente de Zéro est interprétée comme un délai d'attente infini. Ce paramètre attend une valeur de type java.lang.Entier. Si ce paramètre n'est pas défini, les opérations de connexion ne expireront pas (délai infini).

Le délai D'attente du Gestionnaire de connexion (http.connexion-gestionnaire.timeout) - le temps d'attente d'une connexion depuis le gestionnaire de connexions/pool

Juste pour le compte rendu

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

Est une autre façon de faire

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

(Plus de détails ici)

6
répondu Aniket Thakur 2014-09-27 10:27:31

En mots simples:

  • délai de connexion: la limite de temps que votre application attend lorsque vous essayez d'établir une connexion avec le serveur et ne peut pas le faire (l'adresse est incorrecte, ou le serveur est en panne, etc...)
  • socket time out: la limite de temps que votre application attend après avoir été connectée au serveur mais toujours en attente d'une réponse (le retard peut être causé par un serveur suspendu par exemple)
  • délai D'attente du Gestionnaire de connexion: délai d'attente d'une requête pour quand est dans la file d'attente pour l'une des demandes dans la piscine pour être libéré. En d'autres termes, dans HTTP, Nous avons un pool de connexions avec une taille maximale. Quand il y a une charge sur l'application, le pool peut être plein et toute nouvelle demande doit attendre qu'une autre demande du pool se termine.
0
répondu user666 2018-02-14 11:20:32