Heim  >  Artikel  >  So begrenzen Sie die Anzahl der Anfragen in der Go-Sprache

So begrenzen Sie die Anzahl der Anfragen in der Go-Sprache

尊渡假赌尊渡假赌尊渡假赌
尊渡假赌尊渡假赌尊渡假赌Original
2023-06-09 13:13:101196Durchsuche

Die Methode zur Begrenzung der Anzahl der Anforderungen in der Go-Sprache ist: 1. Erstellen Sie eine Go-Beispieldatei. 2. Importieren Sie die erforderlichen Pakete und legen Sie die maximale Anzahl gleichzeitiger Anforderungen fest. 3. Begrenzen Sie die maximale Anzahl gleichzeitiger Anforderungen Anfragen über den SEM-Kanal und blockieren andere Anfragen. Die Syntax lautet „sem := make(chan struct{}, concurrency)“, bis ein freier Kanal verfügbar ist.

So begrenzen Sie die Anzahl der Anfragen in der Go-Sprache

Das Betriebssystem dieses Tutorials: Windows 10-System, Go1.20.1-Version, Dell G3-Computer.

Go-Sprache bietet einen Datentyp namens Kanal. Über diesen Kanal können Sie die Anzahl der Anfragen steuern.

Das Folgende ist ein Beispielcode, der einen Kanal mit Cache verwendet, die maximale Anzahl von Anfragen als Kapazität festlegt und jedes Mal, wenn eine Anfrage gesendet wird, blockiert, bis freie Kanalkapazität vorhanden ist, bevor die Anfrage fortgesetzt wird:

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)
}

In der Im obigen Beispiel haben wir 10 HTTP-Anfragen gestartet, es sind jedoch nur 3 Anfragen gleichzeitig aufgetreten, da wir die maximale Parallelität im Sem-Kanal festgelegt haben. Wenn wir das Parallelitätslimit erreichen, werden auf diese Weise alle anderen Anfragen blockiert (sem <- struct {}{}), bis ein freier Kanal verfügbar ist.

Das obige ist der detaillierte Inhalt vonSo begrenzen Sie die Anzahl der Anfragen in der Go-Sprache. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn