POST 요청으로 http 컨텍스트로 이동 및 취소 요청
클라이언트가 본문 없이 GET 요청을 보내는 경우 서버는 이를 감지할 수 있습니다. 클라이언트가 연결을 닫을 때 취소 신호. 이는 요청 본문을 읽고 클라이언트 연결이 끊어진 시점을 감지하여 수행됩니다.
그러나 클라이언트가 요청 본문과 함께 POST 요청을 보내면 서버는 취소 신호를 즉시 감지할 수 없습니다. 이는 애플리케이션이 명시적으로 요청 본문을 읽을 때까지 서버가 요청 본문 읽기를 시작하지 않기 때문입니다. 결과적으로 서버는 요청 기한이 충족될 때까지 취소 신호를 캡처할 수 없습니다.
이 문제를 해결하고 Go 컨텍스트 패키지로 취소를 적절하게 처리하려면 요청 본문을 즉시 읽으십시오 . 이를 통해 서버는 클라이언트 연결이 끊어진 시기를 감지하고 가능한 한 빨리 불필요한 작업을 취소할 수 있습니다. POST 요청의 본문을 읽으면 서버의 연결 검사를 트리거하여 연결 읽기를 시작하고 닫힌 연결을 감지합니다.
다음은 요청 본문을 읽고 캡처하도록 코드를 수정하는 방법에 대한 예입니다. 즉시 취소 신호:
func handler(w http.ResponseWriter, r *http.Request) { go func(done <-chan struct{}) { <-done fmt.Println("message", "client connection has gone away, request got cancelled") }(r.Context().Done()) io.Copy(ioutil.Discard, r.Body) // Read the body time.Sleep(30 * time.Second) fmt.Fprintf(w, "Hi there, I love %s!\n", r.URL.Path[1:]) }
요청 본문을 명시적으로 읽으면 서버는 클라이언트가 연결을 닫자마자 취소 신호를 감지할 수 있으므로 서버에서 적시에 리소스를 해제할 수 있습니다. 쪽.
위 내용은 Go의 컨텍스트 패키지는 어떻게 POST 요청 취소 처리를 향상시킬 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!