>  기사  >  백엔드 개발  >  'DisableKeepAlives'를 False로 설정했는데도 My Go HTTP 클라이언트에서 여전히 여러 연결을 생성하는 이유는 무엇입니까?

'DisableKeepAlives'를 False로 설정했는데도 My Go HTTP 클라이언트에서 여전히 여러 연결을 생성하는 이유는 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-03 06:21:30994검색

Why Am I Still Creating Multiple Connections in My Go HTTP Client Even with `DisableKeepAlives` Set to False?

Go의 HTTP 클라이언트에서 연결 재사용 문제 해결

문제: 내 Go HTTP 클라이언트가 비활성화KeepAlives 옵션을 false로 설정하시겠습니까?

Go HTTP 클라이언트는 기본적으로 연결을 재사용하도록 설계되었습니다. 그러나 이를 방지할 수 있는 특정 조건이 있습니다.

진단:

제공된 코드에서 http.Transport.RoundTrip() 메서드는 그렇지 않습니다. 바로 뒤에 resp.Close()가 호출됩니다. 이로 인해 요청이 전송된 후 연결이 즉시 종료되어 후속 요청에 재사용되지 못하게 될 수 있습니다.

해결책:

HTTP 연결 재사용을 보장하려면, 두 단계가 필요합니다.

  1. 응답이 완료될 때까지 읽고 모든 데이터가 응답 본문에서 사용되는지 확인하세요. 이 목적으로 io.Copy(ioutil.Discard, resp.Body) 또는 ioutil.ReadAll(resp.Body)를 사용합니다.
  2. res.Body.Close()를 호출하여 응답 본문을 명시적으로 닫고 연결을 해제합니다. 재사용할 수 있습니다.

코드 조각:

<code class="go">res, _ := client.Do(req)
io.Copy(ioutil.Discard, res.Body)
res.Body.Close()</code>

추가 고려 사항:

  • 설정 비활성화KeepAlives 옵션을 true로 설정하면 다른 설정에 관계없이 연결 재사용이 명시적으로 비활성화됩니다.
  • time.Tick과 같은 기술을 사용하면 초당 아웃바운드 요청 수를 제한할 수 있습니다. 그러나 이는 연결 재사용과 특별히 관련이 없으며 연결 재사용이 올바르게 작동하는 경우 필요하지 않을 수 있습니다.

위 내용은 'DisableKeepAlives'를 False로 설정했는데도 My Go HTTP 클라이언트에서 여전히 여러 연결을 생성하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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