Maison > développement back-end > Golang > le corps du texte

Explication détaillée du client HTTP et du pool de connexions du framework Gin

WBOY
Libérer: 2023-06-23 10:19:48
original
2517 Les gens l'ont consulté

Le framework Gin est un framework Web léger conçu pour fournir un modèle de traitement Web hautes performances et haute disponibilité. Dans le framework Gin, le client HTTP et le pool de connexions sont des composants très importants. Cet article approfondira les détails d'implémentation sous-jacents du client HTTP et du pool de connexions dans le framework Gin.

1. Client HTTP

Le client HTTP est le composant principal du framework Gin pour l'envoi de requêtes HTTP. Dans le framework Gin, il existe de nombreuses implémentations différentes de clients HTTP, mais les deux plus couramment utilisées sont le package net/http et le package fasthttp.

  1. net/http

L'utilisation des requêtes net/http nécessite l'établissement d'une connexion TCP, l'envoi d'une requête HTTP, la lecture de la réponse du serveur et enfin la fermeture de la connexion TCP. Ce processus peut entraîner certaines pertes de performances. Si vous devez envoyer un grand nombre de requêtes, il est recommandé d'utiliser le pooling de connexions pour améliorer les performances.

Ce qui suit est un exemple d'utilisation du package net/http pour envoyer une requête HTTP à Baidu et obtenir la réponse :

func main() {
    resp, err := http.Get("http://www.baidu.com")
    if err != nil {
        log.Fatal(err)
    }
    defer resp.Body.Close()

    body, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        log.Fatal(err)
    }

    fmt.Println(string(body))
}
Copier après la connexion
  1. fasthttp

fasthttp est un client et un serveur HTTP hautes performances plus rapides que le net. /http paquet. Il est écrit en Go et peut traiter rapidement un grand nombre de requêtes. Il dispose également d’une implémentation de pool de connexions.

Ce qui suit est un exemple d'utilisation du package fasthttp pour envoyer des requêtes HTTP à Baidu et obtenir la réponse :

func main() {
    client := &fasthttp.Client{}
    req := fasthttp.AcquireRequest()
    defer fasthttp.ReleaseRequest(req)
    req.SetRequestURI("http://www.baidu.com")
    resp := fasthttp.AcquireResponse()
    defer fasthttp.ReleaseResponse(resp)
    err := client.Do(req, resp)
    if err != nil {
        log.Fatal(err)
    }

    fmt.Println(resp.String())
}
Copier après la connexion
  1. Comparaison des performances

Voici les résultats des tests d'utilisation de différents packages clients HTTP pour demander simultanément Baidu 1 000 fois. en même temps :

Outil de test : ApacheBench
Configuration de l'environnement de test : MacBook Air 13 pouces 8G RAM
Résultats des tests : (unité : secondes)

  • Package net/http : temps de réponse moyen 6,90 s, temps de réponse maximum 19,87 s
  • Package fasthttp : temps de réponse moyen de 2,87 s, le temps de réponse maximum est de 10,14 s

On peut voir que l'utilisation du package fasthttp pour envoyer des requêtes HTTP est évidemment plus rapide que le package net/http.

2. Pool de connexions

Le pool de connexions est un élément clé pour améliorer les performances du client HTTP. Pendant le processus de requête du client HTTP, le temps nécessaire pour établir et maintenir la connexion TCP est relativement élevé. Le pool de connexions peut réutiliser les connexions TCP établies, réduisant ainsi le coût en temps de chaque requête et améliorant les performances.

Dans le framework Gin, il existe de nombreuses façons différentes d'implémenter des pools de connexions. Présentons-les respectivement ci-dessous.

  1. net/http

Dans le package net/http, le pooling de connexions est activé par défaut. Il utilise le mécanisme TCPKeepAlive, qui maintiendra la connexion TCP ouverte une fois la connexion TCP terminée jusqu'à ce que la connexion actuelle soit fermée ou fermée par le serveur. La taille du pool de connexions peut être contrôlée en modifiant la structure Transport :

transport := &http.Transport{
    MaxIdleConns:    10,
    IdleConnTimeout: 30 * time.Second,
}
httpClient := &http.Client{
    Transport: transport,
}
Copier après la connexion

MaxIdleConns représente le nombre maximum de connexions inactives et IdleConnTimeout représente le temps d'inactivité maximum des connexions inactives. Vous pouvez contrôler la taille du pool de connexions en modifiant ces deux paramètres.

  1. fasthttp

Dans le package fasthttp, le pool de connexions est implémenté légèrement différemment du package net/http. Il est implémenté via la structure Client, et la taille du pool de connexions peut être modifiée en modifiant le paramètre MaxConnsPerHost :

client := &fasthttp.Client{
    MaxConnsPerHost: 100,
}
Copier après la connexion

MaxConnsPerHost représente le nombre maximum de connexions maintenues par chaque hôte. La taille du pool de connexions peut être modifiée en modifiant ce paramètre.

  1. Comparaison des performances

Voici les résultats des tests d'utilisation de différents pools de connexions pour demander simultanément Baidu 1 000 fois :

Outil de test : ApacheBench
Configuration de l'environnement de test : MacBook Air 13 pouces 8 Go de RAM
Résultats des tests : (Unité : secondes)

  • Le package net/http active le pool de connexions : temps de réponse moyen 7,63 s, temps de réponse maximum 18,59 s
  • Le package fasthttp active le pool de connexions : temps de réponse moyen 3,12 s, temps de réponse maximum 9,90 s

Cela peut être vu que l'utilisation du pool de connexions du package fasthttp est nettement plus rapide que le pool de connexions du package net/http.

Conclusion

Après les tests, le client HTTP et le pool de connexions du package fasthttp ont des performances supérieures à celles du package net/http, notamment lors du traitement d'un grand nombre de requêtes. Par conséquent, lorsque vous utilisez le framework Gin pour envoyer des requêtes HTTP, nous vous recommandons d'utiliser le package fasthttp pour améliorer les performances. Dans le même temps, vous devez faire attention aux paramètres du pool de connexions pour profiter pleinement des avantages de la réutilisation du pool de connexions TCP.

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!

Étiquettes associées:
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal