Maison  >  Article  >  développement back-end  >  requêtes simultanées Golang http

requêtes simultanées Golang http

王林
王林original
2023-05-10 13:37:371386parcourir

Golang est un langage de programmation hautes performances qui prend en charge la programmation simultanée, il présente donc des avantages très significatifs dans le scénario de mise en œuvre de requêtes http simultanées. Cet article explique comment utiliser Golang pour implémenter des requêtes HTTP simultanées.

1. Introduction à la requête HTTP

La requête HTTP est un protocole permettant au client de lancer une requête auprès du serveur. Dans les communications réseau, si le client a besoin d'obtenir certaines ressources du serveur, telles que du texte, des images ou des vidéos, il doit alors lancer une requête HTTP au serveur pour demander l'accès à la ressource. Lorsque le serveur reçoit la requête HTTP, il donnera un résultat de réponse correspondant basé sur le contenu de la requête.

La requête HTTP comprend la méthode de requête, l'en-tête de la requête, le corps de la requête et d'autres parties. La structure spécifique est la suivante :

[请求方法] [请求URL] [协议版本号]
[请求头]:[请求头值]
[请求体]

2 Golang implémente la requête HTTP

Dans Golang, vous pouvez utiliser le package net/http dans Go. bibliothèque standard. Implémentez les requêtes HTTP. Les étapes pour envoyer des requêtes HTTP à l'aide du package http sont relativement simples et peuvent être divisées en les étapes suivantes :

  1. Créer un client http
client := &http.Client{}
  1. Créer une requête HTTP
req, err := http.NewRequest("GET", "http://example.com", nil)
  1. Envoyer une requête HTTP
resp, err := client.Do(req)
  1. Traitement Réponse HTTP
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)

En utilisant cette méthode, les requêtes HTTP peuvent être facilement mises en œuvre. Cependant, si plusieurs requêtes HTTP doivent être traitées, chaque requête est un processus en série et le temps de traitement sera considérablement allongé. Une meilleure approche consiste à lancer plusieurs demandes simultanées en même temps.

3. Golang implémente des requêtes HTTP simultanées

Golang a des capacités de concurrence très puissantes, il est donc très pratique de l'utiliser pour implémenter des requêtes HTTP simultanées. L'idée spécifique de l'implémentation est d'utiliser goroutine pour obtenir simultanément des ressources à partir de plusieurs URL.

  1. Exécuter simultanément les requêtes HTTP
func getRequest(url string, ch chan<- string) {
    resp, err := http.Get(url)
    if err != nil {
        panic(err)
    }
    defer resp.Body.Close()
    body, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        panic(err)
    }
    ch <- string(body)
}

La fonction ci-dessus reçoit un paramètre d'URL et un paramètre de canal, exécute les requêtes HTTP GET simultanément, obtient les données de réponse et envoie le résultat au canal ch.

  1. Initier plusieurs requêtes HTTP simultanées
func main() {
    urls := []string{"http://example1.com", "http://example2.com", "http://example3.com"}
    ch := make(chan string)
    for _, url := range urls {
        go getRequest(url, ch)
    }
    for range urls {
        fmt.Println(<-ch)
    }
}

La fonction ci-dessus reçoit un paramètre de tableau d'URL, envoie des requêtes HTTP GET simultanément et envoie les données de réponse au canal ch. Dans la fonction principale, les informations obtenues en envoyant des réponses à différentes URL sont sorties en boucle.

4. Golang implémente le traitement du délai d'attente des requêtes HTTP

Lors des requêtes HTTP, il est souvent nécessaire de prendre en compte le problème du délai d'attente. Si la ressource ne peut pas être obtenue dans un délai donné, la demande doit être terminée et la gestion des exceptions doit être effectuée. Pour résoudre ce problème, il existe une bonne implémentation dans Golang, qui est également très simple.

func getRequest(url string, ch chan<- string, client *http.Client) {
    resp, err := client.Get(url)
    if err != nil {
        ch <- fmt.Sprintf("%s -> %s", url, err)
        return
    }
    defer resp.Body.Close()
    body, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        ch <- fmt.Sprintf("%s -> %s", url, err)
        return
    }
    ch <- string(body)
}

Dans le code ci-dessus, le traitement du délai d'attente des requêtes HTTP est implémenté en spécifiant l'attribut client lors de la demande. Si la ressource ne peut pas être obtenue dans le délai spécifié, une exception de délai d'attente sera levée.

Résumé

Cet article explique comment utiliser Golang pour implémenter des requêtes HTTP simultanées. Les requêtes HTTP peuvent être implémentées très facilement via le package golang net/http, et en utilisant les puissantes capacités de concurrence de Golang, une méthode de traitement des requêtes HTTP plus efficace peut être obtenue, ce qui est très utile dans le développement réel. Dans le même temps, Golang fournit également un mécanisme de traitement du délai d'attente des requêtes HTTP, qui permet de mieux maintenir la stabilité des requêtes.

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
Article précédent:golang modifie le pointeur dllArticle suivant:golang modifie le pointeur dll