Maison > Problème commun > Comment limiter le nombre de requêtes en langage Go

Comment limiter le nombre de requêtes en langage Go

尊渡假赌尊渡假赌尊渡假赌
Libérer: 2023-06-09 13:23:55
original
1235 Les gens l'ont consulté

La méthode pour limiter le nombre de requêtes dans le langage Go est la suivante : 1. Créer un exemple de fichier Go ; 2. Importer les packages requis et définir le nombre maximum de requêtes simultanées "concurrence" ; requêtes via le canal sem et bloquer les autres requêtes. La syntaxe est "sem := make(chan struct{}, concurrency)" jusqu'à ce qu'un canal inactif soit disponible.

Comment limiter le nombre de requêtes en langage Go

Le système d'exploitation de ce tutoriel : système Windows 10, version Go1.20.1, ordinateur Dell G3.

Le langage Go fournit un type de données appelé canal. Vous pouvez utiliser ce canal pour contrôler le nombre de demandes.

Ce qui suit est un exemple de code, utilisant un canal avec cache, définissant le nombre maximum de requêtes comme capacité et bloquant chaque fois qu'une requête est envoyée jusqu'à ce qu'il y ait une capacité de canal libre avant de continuer la requête :

package main
import (
    "fmt"
    "net/http"
)
func main() {
    urls := []string{
        "https://www.google.com",
        "https://www.facebook.com",
        "https://www.airbnb.com",
        "https://www.github.com",
        "https://www.twitter.com",
        "https://www.linkedin.com",
        "https://www.youtube.com",
        "https://www.microsoft.com",
        "https://www.reddit.com",
        "https://www.stackoverflow.com",
    }
    concurrency := 3 // 最大同时请求数量
    sem := make(chan struct{}, concurrency)
    for _, url := range urls {
        sem <- struct{}{}
        go func(url string) {
            request(url)
            <-sem
        }(url)
    }
    for i := 0; i < concurrency; i++ {
        sem <- struct{}{}
    }
}
func request(url string) {
    res, err := http.Get(url)
    if err != nil {
        fmt.Printf("%s is down\n", url)
        return
    }
    defer res.Body.Close()
    fmt.Printf("%s -> status code: %d \n", url, res.StatusCode)
}
Copier après la connexion

Dans le Dans l'exemple ci-dessus, nous avons lancé 10 requêtes HTTP, mais seulement 3 requêtes se sont produites en même temps car nous avons défini la concurrence maximale dans le canal Sem. De cette façon, lorsque nous atteignons la limite de simultanéité, toutes les autres requêtes seront bloquées (sem <- struct {}{}) jusqu'à ce qu'un canal gratuit soit disponible.

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