Désactivation du regroupement de connexions pour Go http.Client
Dans le client HTTP de Go, le regroupement de connexions permet une réutilisation efficace des connexions entre les requêtes vers le même hôte. Cependant, à des fins de test, la désactivation du regroupement de connexions peut être nécessaire pour établir une nouvelle connexion TCP pour chaque requête HTTP/1.x.
Utilisation de DisableKeepAlives ou MaxIdleConnsPerHost
Connexions sont généralement ajoutés à un pool dans Transport.tryPutIdleConn. Pour désactiver le pooling, définissez Transport.DisableKeepAlives sur true ou Transport.MaxIdleConnsPerHost sur une valeur négative :
func disableKeepAlive(c *http.Client) { t := c.Transport.(*http.Transport) t.DisableKeepAlives = true } func disableMaxIdle(c *http.Client) { t := c.Transport.(*http.Transport) t.MaxIdleConnsPerHost = -1 }
Utilisation de Dialer.KeepAlive
Malgré les hypothèses initiales, la définition l'option Dialer.KeepAlive ne désactive pas le pooling.
Condition de concurrence possible
Le réglage de Transport.IdleConnTimeout sur une durée très courte (par exemple, 1 nanoseconde) peut entraîner " tls : utilisation d'erreurs de connexion fermée en raison d'une condition de concurrence potentielle dans la bibliothèque standard Go.
Approche recommandée
Pour garantir que le regroupement de connexions est désactivé, il est recommandé de cloner le transport par défaut et de modifier ses options :
func disablePooling(c *http.Client) { t := c.Transport.(*http.Transport).Clone() t.MaxIdleConnsPerHost = -1 t.DisableKeepAlives = true }
Cette approche permet de personnaliser diverses options de transport tout en préservant les valeurs par défaut.
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!