web-dev-qa-db-fra.com

Délai de connexion et de demande de connexion

J'utilise les composants Http Apache pour effectuer les interactions http. J'ai besoin d'ajuster mon client http. À cette fin, j'ai deux paramètres: délai de connexion et délai de demande de connexion. Dans la documentation de la bibliothèque et dans le code source (aucun commentaire n'a été trouvé), je n'ai pas trouvé de définition de ces termes. J'ai besoin de savoir ce que cela signifie exactement. Peut-être qu'ils ont été définis dans la documentation du protocole HTTP mais je ne le trouve pas. Donc, ma question est de savoir ce que signifient ces deux termes et comment ils se distinguent l'un de l'autre.

19
mvb13

HttpClient a un moyen de définir le délai de connexion et de socket (setConnectionTimeout() et setTimeout()) selon HttpClient javadocs .

Connection timeout est le délai d'attente avant l'établissement d'une connexion avec le serveur.

Socket timeout est le délai d'expiration pour recevoir des données (délai d'expiration du socket).

Exemple:

Disons que vous pointez votre navigateur pour accéder à une page Web. Si le serveur ne répond pas dans X secondes, un délai de connexion se produit. Mais s'il établit la connexion, le serveur commencera à traiter le résultat pour le navigateur. S'il ne termine pas ce traitement en Y secondes, un délai d'attente de socket se produira.

24
dgimenes

Donc, ma question est de savoir ce que signifient [connection-timeout et connection-request-timeout] et comment ils se distinguent les uns des autres.

Le délai d'expiration de la connexion est le délai d'expiration en millisecondes jusqu'à ce que le serveur accepte la demande. Si vous spécifiez 3000, le client http attendra 3 secondes que le serveur accepte la connexion TCP avant expiration. Ceci est généralement utilisé pour vous assurer que vous n'avez pas de problème de réseau ou que vous contactez le bon nom d'hôte ou la bonne adresse. Cela équivaut à --connect-timeout seconds option.

Connection-request-timeout est le délai d'entrée/sortie après la connexion a été établie. Si vous spécifiez cette valeur comme 10000 puis après que le client http s'est connecté au serveur et envoie une demande, il attendra 10 secondes pour que le serveur renvoie un résultat. Ceci est généralement utilisé pour garantir que votre travail n'attend pas un serveur lent pour toujours. Cela équivaut à curl's --max-time seconds option.

Dans HttpClient 4.X.X, voici comment créer un client qui utilise un connectTimeoutMillis et requestTimeoutMillis particulier.

HttpClientBuilder clientBuilder = HttpClientBuilder.create();
RequestConfig.Builder requestBuilder = RequestConfig.custom();
requestBuilder = requestBuilder.setConnectTimeout(connectTimeoutMillis);
requestBuilder = requestBuilder.setConnectionRequestTimeout(requestTimeoutMillis);
clientBuilder.setDefaultRequestConfig(requestBuilder.build());
CloseableHttpClient httpClient = clientBuilder.build();
...

Btw, les javadocs de ce code sont nulles. Essayez de comprendre à la main comment utiliser le générateur de configuration. Merde.

8
Gray