Maison > développement back-end > Golang > Comment désactiver efficacement le regroupement de connexions pour le http.Client de Go ?

Comment désactiver efficacement le regroupement de connexions pour le http.Client de Go ?

Barbara Streisand
Libérer: 2024-11-09 21:07:02
original
960 Les gens l'ont consulté

How to Effectively Disable Connection Pooling for Go's http.Client?

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
}
Copier après la connexion

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
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal