>  기사  >  백엔드 개발  >  시간 초과가 발생할 때 고루틴 누출을 방지하고 HTTP 요청을 취소하는 방법은 무엇입니까?

시간 초과가 발생할 때 고루틴 누출을 방지하고 HTTP 요청을 취소하는 방법은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-10-31 08:22:02540검색

How to prevent goroutine leaks and cancel HTTP requests when a timeout occurs?

고루틴 시간 초과 및 취소

제공된 코드는 HTTP 호출을 통해 외부 서비스에서 데이터를 얻으려고 시도하고 지정된 기간 후에 시간 초과되는 Find() 함수를 정의합니다. . 그러나 제기되는 우려는 고루틴 누출 가능성이 있는지, 타임아웃이 발생했을 때 HTTP 요청을 취소할 수 있는 방법이 있는지입니다.

컨텍스트 기반 취소

취소를 효과적으로 제어하려면 HTTP 요청의 경우 context.Context 메커니즘을 활용할 수 있습니다. 시간 초과가 있는 컨텍스트를 활용하면 시간 초과에 도달할 때 해당 컨텍스트와 연결된 모든 HTTP 요청이 종료되도록 할 수 있습니다.

다음 코드는 컨텍스트 기반 취소를 구현하는 방법을 보여줍니다.

<code class="go">// create a timeout or cancelation context to suit your requirements
ctx, cancel := context.WithTimeout(context.Background(), time.Second)
defer cancel()

req, err := http.NewRequest("GET", location, nil)

// add the context to each request and they will be canceled in unison
resp, err := http.Do(req.WithContext(ctx))</code>

이 코드 내에서 ctx는 시간 초과 또는 취소 기준을 지정하고 defer cancel()은 함수가 반환될 때 컨텍스트가 항상 취소되도록 보장합니다. req.WithContext(ctx)를 통해 각 요청에 컨텍스트를 추가하면 시간 초과가 만료되면 모든 요청이 동시에 취소됩니다.

이 접근 방식을 사용하면 시간 초과 시 HTTP 요청을 담당하는 고루틴이 종료됩니다. 발생하여 고루틴 누출을 방지하고 시스템이 시간 초과에 신속하게 응답하도록 합니다.

위 내용은 시간 초과가 발생할 때 고루틴 누출을 방지하고 HTTP 요청을 취소하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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