使用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 的 Context 套件如何改進 POST 請求取消處理?的詳細內容。更多資訊請關注PHP中文網其他相關文章!