Maison  >  Article  >  développement back-end  >  Comment utiliser http.Transport pour gérer et contrôler les connexions HTTP longues dans Go ?

Comment utiliser http.Transport pour gérer et contrôler les connexions HTTP longues dans Go ?

王林
王林original
2023-07-23 18:12:231489parcourir

Comment utiliser http.Transport pour gérer et contrôler les connexions HTTP longues dans Go ?

Lors des requêtes HTTP, l'établissement d'une longue connexion peut améliorer considérablement les performances et l'efficacité de la requête. Le langage Go fournit http.Transport pour gérer et contrôler les connexions HTTP longues.

http.Transport est le module principal du client HTTP en langage Go, qui peut effectuer des opérations telles que la réutilisation de connexions, le contrôle du temps d'inactivité de connexion et la fermeture de connexion. Ce qui suit explique comment utiliser http.Transport pour gérer et contrôler les connexions HTTP longues.

Tout d'abord, nous devons créer un objet http.Transport et définir certains paramètres pour contrôler la gestion des connexions. Par exemple, nous pouvons définir le nombre maximum de connexions inactives, le temps d'inactivité maximum, le nombre maximum de requêtes simultanées, etc. Voici un exemple de code :

package main

import (
    "log"
    "net/http"
    "time"
)

func main() {
    transport := &http.Transport{
        MaxIdleConns:          10,               // 最大空闲连接数
        IdleConnTimeout:       30 * time.Second, // 最大空闲时间
        MaxIdleConnsPerHost:   2,                // 每个host的最大空闲连接数
        MaxConnsPerHost:       0,                // 每个host的最大连接数,0表示不限制
        MaxResponseHeaderBytes: 1024 * 1024,      // 响应头的最大长度
        TLSHandshakeTimeout:   10 * time.Second, // TLS握手的超时时间
    }
    client := &http.Client{
        Transport: transport,
    }

    resp, err := client.Get("https://www.example.com")
    if err != nil {
        log.Fatal(err)
    }
    defer resp.Body.Close()

    // 处理响应
}

Dans le code ci-dessus, nous créons un objet http.Transport et définissons certains paramètres. Parmi eux, MaxIdleConns représente le nombre maximum de connexions inactives, IdleConnTimeout représente le temps d'inactivité maximum, MaxIdleConnsPerHost représente le nombre maximum de connexions inactives par hôte, MaxConnsPerHost représente le nombre maximum de connexions par hôte, MaxResponseHeaderBytes représente la longueur maximale de l'en-tête de réponse, et TLSHandshakeTimeout représente le délai d'expiration de la négociation TLS.

Ensuite, nous utilisons l'objet http.Transport créé pour créer un objet http.Client en tant que client pour effectuer des requêtes HTTP. Dans ce http.Client, nous définissons l'objet http.Transport que nous venons de créer sur sa propriété Transport.

Enfin, nous pouvons utiliser l'objet http.Client créé pour envoyer des requêtes HTTP. Lors de l'envoi d'une requête HTTP, le http.Transport sous-jacent se chargera de la gestion et du contrôle de la connexion en fonction des paramètres que nous avons définis. Il n'est pas nécessaire de gérer manuellement l'établissement et la fermeture des connexions, http.Transport réutilisera automatiquement les connexions et fermera les connexions inactives.

En plus des paramètres mentionnés ci-dessus, http.Transport fournit également d'autres méthodes et propriétés pour un contrôle plus précis de la gestion des connexions, telles que CancelRequest, CloseIdleConnections et ForceAttemptHTTP2.

L'utilisation de http.Transport pour gérer et contrôler les connexions HTTP longues peut nous aider à améliorer les performances et l'efficacité des requêtes HTTP. Cependant, les paramètres doivent être définis de manière appropriée en fonction de la situation réelle, puis testés et optimisés pour obtenir les meilleurs résultats.

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