>백엔드 개발 >Golang >새로운 TCP 연결을 위해 Go의 http.Client에서 연결 풀링을 어떻게 비활성화할 수 있나요?

새로운 TCP 연결을 위해 Go의 http.Client에서 연결 풀링을 어떻게 비활성화할 수 있나요?

Patricia Arquette
Patricia Arquette원래의
2024-11-07 17:17:03908검색

How can I Disable Connection Pooling in Go's http.Client for Fresh TCP Connections?

Go http.Client에 대한 연결 풀링 끄기

테스트 시 각 HTTP/1.x 요청에 대해 새로운 TCP 연결을 얻으려면, Go의 HTTP 클라이언트에서 연결 풀링 메커니즘을 비활성화하는 것은 필수적입니다. 이는 클라이언트와 연결된 HTTP 전송을 수정하여 수행할 수 있습니다.

한 가지 접근 방식은 전송 내에서 비활성화KeepAlives를 true로 설정하는 것입니다.

t := http.DefaultTransport.(*http.Transport).Clone()
t.DisableKeepAlives = true
c := &http.Client{Transport: t}

이 옵션은 연결 유지 연결을 명시적으로 비활성화합니다. 클라이언트가 각 요청에 대해 새로운 TCP 연결을 설정하도록 강제합니다. 그러나 요청에 Connection: close 헤더를 추가할 수 있습니다.

또는 MaxIdleConnsPerHost를 음수 값으로 설정하면 풀링이 효과적으로 비활성화됩니다.

t := http.DefaultTransport.(*http.Transport).Clone()
t.MaxIdleConnsPerHost = -1
c := &http.Client{Transport: t}

이 옵션을 사용하면 전송에서 연결을 추가하지 않습니다. 풀에 연결하여 모든 요청에 ​​대해 새 연결이 설정되도록 합니다.

기본 전송 구성을 유지하려면 이러한 설정을 저장할 새 전송을 생성하는 것이 좋습니다.

Dialer.KeepAlive를 -로 설정 1은 주로 활성 연결에 대한 연결 유지 동작을 제어하므로 풀링을 비활성화하지 않습니다. 일반적인 가정과 달리 이 옵션은 설정된 TCP 연결 수에 영향을 주지 않습니다.

마지막으로 IdleConnTimeout을 1 * time.Nanosecond와 같은 매우 짧은 기간으로 설정하면 유휴 연결이 닫히는 것을 확인하는 데 도움이 될 수도 있습니다. 즉시. 그러나 이 접근 방식은 잠재적인 경합 상황을 피하기 위해 주의해서 사용해야 합니다.

위 내용은 새로운 TCP 연결을 위해 Go의 http.Client에서 연결 풀링을 어떻게 비활성화할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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