Désactivation du regroupement de connexions pour Go http.Client
Pour obtenir une nouvelle connexion TCP pour chaque requête HTTP/1.x lors des tests, la désactivation du mécanisme de regroupement de connexions dans le client HTTP de Go est essentielle. Cela peut être accompli en modifiant le transport HTTP associé au client.
Une approche consiste à définir DisableKeepAlives sur true dans le transport :
t := http.DefaultTransport.(*http.Transport).Clone() t.DisableKeepAlives = true c := &http.Client{Transport: t}
Cette option désactive explicitement les connexions keep-alive, obligeant le client à établir une nouvelle connexion TCP pour chaque requête. Cependant, il peut ajouter un en-tête Connection: close aux requêtes.
Alternativement, définir MaxIdleConnsPerHost sur une valeur négative désactive efficacement le pooling :
t := http.DefaultTransport.(*http.Transport).Clone() t.MaxIdleConnsPerHost = -1 c := &http.Client{Transport: t}
Avec cette option, le transport n'ajoutera jamais de connexions. au pool, garantissant qu'une nouvelle connexion est établie pour chaque demande.
La création d'un nouveau transport pour stocker ces paramètres est recommandée afin de préserver la configuration de transport par défaut.
Réglage de Dialer.KeepAlive sur - 1 ne désactive pas le pooling car il contrôle principalement le comportement de maintien des connexions actives. Contrairement aux hypothèses courantes, cette option n'a pas d'impact sur le nombre de connexions TCP établies.
Enfin, définir IdleConnTimeout sur une durée très courte, telle que 1 * time.Nanosecond, peut également aider à garantir que les connexions inactives sont fermées. rapidement. Cependant, cette approche doit être utilisée avec prudence pour éviter d'éventuelles conditions de concurrence.
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!