>  기사  >  Go 언어에서 요청 수를 제한하는 방법

Go 언어에서 요청 수를 제한하는 방법

尊渡假赌尊渡假赌尊渡假赌
尊渡假赌尊渡假赌尊渡假赌원래의
2023-06-09 13:13:101179검색

Go 언어에서 요청 수를 제한하는 방법은 다음과 같습니다. 1. Go 샘플 파일을 만듭니다. 2. 필요한 패키지를 가져오고 최대 동시 요청 수를 "동시성"으로 설정합니다. sem 채널을 통해 요청하고 다른 요청은 차단합니다. 구문은 유휴 채널을 사용할 수 있을 때까지 "sem := make(chan struct{}, concurrency)"입니다.

Go 언어에서 요청 수를 제한하는 방법

이 튜토리얼의 운영 체제: Windows 10 시스템, Go1.20.1 버전, Dell G3 컴퓨터.

Go 언어는 채널이라는 데이터 유형을 제공합니다. 이 채널을 사용하여 요청 수를 제어할 수 있습니다.

다음은 캐시가 있는 채널을 사용하고, 최대 요청 수를 용량으로 설정하고, 요청을 계속하기 전에 여유 채널 용량이 확보될 때까지 요청이 전송될 때마다 차단하는 몇 가지 샘플 코드입니다.

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 the 위의 예에서는 10개의 HTTP 요청을 시작했지만 sem 채널에 최대 동시성을 설정했기 때문에 동시에 3개의 요청만 발생했습니다. 이렇게 하면 동시성 제한에 도달하면 무료 채널을 사용할 수 있을 때까지 다른 모든 요청이 차단됩니다(sem <- struct {}{}).

위 내용은 Go 언어에서 요청 수를 제한하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.