>  기사  >  백엔드 개발  >  Go의 http.Client에 대한 연결 풀링을 효과적으로 비활성화하는 방법은 무엇입니까?

Go의 http.Client에 대한 연결 풀링을 효과적으로 비활성화하는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-11-09 21:07:02924검색

How to Effectively Disable Connection Pooling for Go's http.Client?

Go http.Client에 대한 연결 풀링 비활성화

Go의 HTTP 클라이언트에서 연결 풀링을 사용하면 동일한 클라이언트에 대한 요청 간의 연결을 효율적으로 재사용할 수 있습니다. 주인. 그러나 테스트 목적으로 각 HTTP/1.x 요청에 대해 새 TCP 연결을 설정하려면 연결 풀링을 비활성화해야 할 수도 있습니다.

DisableKeepAlives 또는 MaxIdleConnsPerHost

연결 사용 일반적으로 Transport.tryPutIdleConn의 풀에 추가됩니다. 풀링을 비활성화하려면 Transport.DisableKeepAlives를 true로 설정하거나 Transport.MaxIdleConnsPerHost를 음수 값으로 설정합니다.

func disableKeepAlive(c *http.Client) {
    t := c.Transport.(*http.Transport)
    t.DisableKeepAlives = true
}

func disableMaxIdle(c *http.Client) {
    t := c.Transport.(*http.Transport)
    t.MaxIdleConnsPerHost = -1
}

Dialer.KeepAlive 사용

초기 가정에도 불구하고, 설정 Dialer.KeepAlive 옵션은 풀링을 비활성화하지 않습니다.

가능한 경쟁 조건

Transport.IdleConnTimeout을 매우 짧은 기간(예: 1나노초)으로 설정하면 " tls: Go 표준 라이브러리의 잠재적 경합 조건으로 인한 "닫힌 연결 사용" 오류.

권장 접근 방식

연결 풀링을 비활성화하려면 다음을 수행하세요. 기본 전송을 복제하고 해당 옵션을 수정하는 것이 좋습니다.

func disablePooling(c *http.Client) {
    t := c.Transport.(*http.Transport).Clone()
    t.MaxIdleConnsPerHost = -1
    t.DisableKeepAlives = true
}

이 접근 방식을 사용하면 기본값을 유지하면서 다양한 전송 옵션을 사용자 정의할 수 있습니다.

위 내용은 Go의 http.Client에 대한 연결 풀링을 효과적으로 비활성화하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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