Quelle est la différence entre les trois (marqués 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 avant l'établissement de la connexion.
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 celui ci-dessous:
3. "http.connection-manager.timeout"
Au niveau le plus bas, HTTP est TCP socket. Ainsi, lorsque vous demandez une URL et obtenez une réponse, au niveau inférieur, un client Socket est créé qui établit une connexion avec le serveur distant Socket, envoie des données et reçoit une réponse.
setConnectionTimeout: Le client essaie de se connecter au serveur. Cela indique le temps écoulé avant l'établissement de la connexion ou la réponse du serveur à la demande de connexion.
setSoTimeout: Après avoir établi la connexion, le socket client attend la 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 le serveur ne réponde. Veuillez noter que ce n'est pas la même chose que HTTP Error 408
que le serveur envoie au client. En d'autres termes, son 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.connection-manager.timeout: MultiThreadedHttpConnectionManager
utilise un pool de connexions HTTP. Il a des valeurs maximale et minimale par ensemble d'hôtes 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
ait renvoyé une connexion.
Une explication détaillée est fournie dans Documentation de gestion des connexions sur le site client Apache HTTP.
CoreConnectionPNames.SO_TIMEOUT = 'http.socket.timeout': définit le délai d'expiration du socket (SO_TIMEOUT) en millisecondes, qui est le délai d'attente pour attendre des données ou, autrement dit, une période d'inactivité maximale entre deux paquets de données consécutifs). Une valeur de temporisation de zéro est interprétée comme une temporisation infinie. Ce paramètre attend une valeur de type Java.lang.Integer. Si ce paramètre n'est pas défini, les opérations de lecture n'expireront pas (délai infini).
CoreConnectionPNames.CONNECTION_TIMEOUT = 'http.connection.timeout': détermine le délai d'expiration en millisecondes jusqu'à ce qu'une connexion soit établie. Une valeur de temporisation de zéro est interprétée comme une temporisation infinie. Ce paramètre attend une valeur de type Java.lang.Integer. Si ce paramètre n'est pas défini, les opérations de connexion n'expireront pas (délai infini).
le délai d'expiration de Connection Manager (http.connection-manager.timeout) - le temps d'attente d'une connexion à partir du gestionnaire/pool de connexions
Juste pour info
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);
En termes simples: