Maison >développement back-end >Golang >Pourquoi le client Go HTTPS ne réutilise-t-il pas les connexions par défaut ?

Pourquoi le client Go HTTPS ne réutilise-t-il pas les connexions par défaut ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-02 10:19:02250parcourir

Why Doesn't the Go HTTPS Client Reuse Connections by Default?

Pourquoi le client Go HTTPS ne réutilise pas les connexions

Dans cette discussion, nous explorons un problème dans lequel le client Go HTTPS ne parvient pas à réutiliser les connexions, ce qui entraîne un comportement potentiellement problématique.

Description du problème

Le code Go fourni crée plusieurs connexions à un hôte particulier, malgré l'utilisation d'une seule instance http.Transport avec DisableKeepAlives défini sur false. Ceci est différent du code Python similaire utilisant la bibliothèque de requêtes, qui réutilise les connexions.

Comprendre le problème

Le malentendu initial était que le client Go devait réutiliser les connexions par défaut. Cependant, des précisions ont révélé que le comportement par défaut nécessite que la réponse soit fermée avant que les connexions puissent être réutilisées.

Solution

Pour assurer la réutilisation des connexions HTTP dans Go, deux étapes essentielles doivent être respectées :

  1. Lire jusqu'à ce que la réponse soit complète (par exemple, utilisez ioutil.ReadAll(resp.Body))
  2. Fermez le corps de la réponse (c'est-à-dire resp.Body.Close())

Considérations supplémentaires

Bien que l'absence de contrôle maximal des connexions soit une limitation, elle peut être atténuée par des requêtes de limitation de débit utilisant time.Tick.

Conclusion

En résolvant le problème de la fermeture du corps de la réponse, les développeurs peuvent garantir que le client HTTP de Go réutilise correctement les connexions. Ceci est crucial pour éviter d’accumuler des connexions TCP excessives.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn