Le langage Go est un langage de programmation efficace. Ses avantages tels que la simplicité, l'efficacité, la sécurité et la fiabilité ont été largement reconnus et appliqués. Parmi eux, la raison pour laquelle il est largement utilisé est également indissociable de la puissante bibliothèque réseau qu’il prend en charge. Cet article se concentrera sur le traitement des requêtes HTTP en langage Go.
1. Principes de base du traitement des requêtes HTTP
Le traitement des requêtes HTTP est une partie essentielle du développement back-end Web, et le traitement des requêtes HTTP en langage Go peut être considéré comme extrêmement simple et facile à utiliser. ensemble. API associées.
- http.ListenAndServe()
peut être compris comme un serveur Http, qui peut écouter directement le port local et attendre l'arrivée des requêtes Http.
erreur func ListenAndServe(addr string, handler Handler)
Parmi eux, addr est utilisé pour spécifier l'adresse réseau. La forme générale est "Adresse IP ou nom de domaine : numéro de port", mais si le numéro de port est 0, le système d'exploitation l'attribuera automatiquement. Un gestionnaire de port inutilisé est une fonction utilisée pour gérer les requêtes http.
- http.HandleFunc()
est une API qui enregistre les fonctions de rappel de requête http. Sa définition est la suivante :
func HandleFunc(pattern string, handler func(ResponseWriter, *Request))
où pattern est l'enregistrement. request Le chemin, handler est la fonction de rappel de la requête http. La structure de la fonction de rappel est la suivante :
type HandlerFunc func(ResponseWriter, *Request)
Vous pouvez voir que les paramètres formels de la fonction de rappel de la requête HTTP. sont http.ResponseWriter et *http Request.
- http.ResponseWriter
est le type qui renvoie la réponse Http au client. Les méthodes couramment utilisées sont :
1) ResponseWriter.Header(), utilisée pour définir l'en-tête de réponse Http ; ), Utilisé pour écrire le corps de la réponse HTTP au client.
http.Request
représente la structure de la requête HTTP, qui contient les détails de toutes les requêtes HTTP, tels que l'en-tête, le corps, la méthode, etc. -
Exemple de traitement de requête HTTP L'extrait de code suivant montre comment gérer les requêtes HTTP GET en langage Go, qui appelle http.HandleFunc() pour enregistrer une fonction de rappel :
func main() {
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello, World!")
})
http.ListenAndServe(":8080", nil)
}
Remarque : Lorsque l'interface de la requête Http est définie comme "/", le chemin qui doit être enregistré par http.HandleFunc() doit être écrit comme "/".
2. Méthode de traitement des requêtes HTTP
http.Get()
est utilisée pour obtenir la réponse de la requête HTTP distante. Si le code d'état de retour de la requête n'est pas 2xx, un message d'erreur sera renvoyé. Le type renvoyé par cette méthode est *http. La réponse est une structure qui contient de nombreux attributs, dont le plus important est son attribut Body. L'attribut Body représente le contenu du corps de la réponse à la requête HTTP. Vous pouvez utiliser ioutil.ReadAll. () fonction pour lire le contenu du corps du Body .
func (c
Client) Get(url string) (resp
Response, err error)
http.PostForm()
est utilisé pour soumettre des données de formulaire HTTP, telles que la soumission d'un formulaire de connexion. Le plus couramment utilisé. ContentType est de type application/x-www-form-urlencoded, le type de retour de cette méthode est *http.Response. Il convient de noter que cette méthode ne prend en charge que les requêtes POST et que la méthode url.Values.Encode() doit être appelée pour encoder les données du formulaire avant de soumettre le formulaire.
func PostForm(url string, data url.Values) (resp *Response, err error)
http.Post()
Cette méthode est similaire à http.PostForm(), mais prend en charge plus de types de requêtes réseau, Autrement dit, le type ContentType n'est pas limité à application/x-www-form-urlencoded.
func (c
Client) Post(url string, bodyType string, body io.Reader) (resp
Response, err error)Parmi eux, bodyType est le type de contenu demandé et body est le contenu de la demande.
http.Do()
prend en charge davantage de types de requêtes réseau et nous pouvons personnaliser les en-têtes de requête, ce qui est la méthode de requête la plus flexible. Il convient de noter que cette méthode renverra *http.Response et que vous devrez la fermer après avoir utilisé la réponse.
func (c
Client) Do(req
Request) (resp *Response, err error)3. Optimisation des performances de traitement des requêtes HTTP
Lors de l'utilisation de plusieurs Goroutines pour effectuer des requêtes HTTP en même temps, nous devons comprendre le goulot d’étranglement des performances. Capacité à choisir des solutions d’optimisation appropriées. Ce qui suit présente plusieurs solutions d’optimisation des performances des requêtes HTTP.
- Keep-Alive
Keep-Alive de la connexion http consiste à optimiser autant que possible l'occupation des ressources de la connexion http et à éviter la perte de performances causée par l'établissement et la déconnexion fréquents de la connexion TCP en maintenant la connexion TCP avec le serveur sans le fermer. , vous pouvez réduire la perte de performances causée par l'établissement et la fermeture de TCP et améliorer l'efficacité des requêtes http.
- Pool de connexions inactives
Si nous devons demander des chemins différents pour le même hôte, nous pouvons utiliser un pool de connexions inactives pour gérer la connexion en définissant une tranche pour enregistrer la connexion, avant de la réutiliser, essayez d'obtenir la connexion de la tranche. et vérifiez si c'est OK. Si elle ne peut pas être réutilisée, fermez la connexion. Si le nombre de connexions dépasse le nombre maximum de connexions dans le pool, fermez la connexion la plus ancienne. De cette façon, le nombre de connexions peut être cohérent. avec le nombre maximum de connexions du système d’exploitation.
- Connexion longue
Lorsqu'un grand nombre de requêtes doivent être initiées, l'optimisation des connexions longues est très importante. Lorsque le serveur supporte le Keep-Alive de Http, le client peut établir une connexion longue en spécifiant l'en-tête Connection:keep-alive. . statut, plusieurs demandes et réponses peuvent être traitées et une connexion TCP peut être réutilisée, réduisant ainsi l'établissement et la fermeture de TCP.
IV.Résumé
Cet article présente principalement le traitement des requêtes HTTP en langage Go. Dans le développement réel, nous pouvons choisir différentes méthodes de requête réseau et solutions d'optimisation des performances en fonction des besoins de l'entreprise pour obtenir de meilleurs effets de requête réseau. Dans le même temps, la bibliothèque de requêtes réseau dans le langage Go est extrêmement simple et facile à utiliser. Elle prend également en charge une variété de méthodes de requête HTTP et de solutions d'optimisation, ce qui offre une grande commodité pour notre développement back-end.
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!