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 중국어 웹사이트의 기타 관련 기사를 참조하세요!