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.
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.
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.