Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Go Boleh Mengendalikan Pembatalan Pelanggan dalam Permintaan HTTP dengan Badan?
Pembatalan Pelanggan dengan Badan Permintaan HTTP dalam Go
Apabila mengendalikan permintaan HTTP, adalah penting untuk dapat bertindak balas kepada isyarat pembatalan pelanggan untuk anggun pengurusan sumber. Walaupun pakej konteks Go menyediakan mekanisme untuk menangkap pembatalan, ia mungkin tidak berkelakuan seperti yang dijangkakan dalam senario tertentu.
Mengapa Permintaan GET dan POST Berbeza
Perbezaan tingkah laku antara GET dan permintaan POST berpunca daripada cara permintaan diproses oleh HTTP pelayan.
Tangkap Pembatalan dengan Badan Permintaan
Untuk menangkap isyarat pembatalan bagi permintaan dengan badan, adalah penting untuk mula membaca kandungan permintaan dengan segera. Pelayan http Go hanya menyemak sambungan tertutup apabila aplikasi membaca dari badan permintaan.
Penyelesaian:
Untuk memastikan isyarat pembatalan ditangkap seawal mungkin, ubah suai pengendali permintaan untuk mula membaca isi permintaan dengan segera:
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 to detect closed connections time.Sleep(30 * time.Second) fmt.Fprintf(w, "Hi there, I love %s!\n", r.URL.Path[1:]) }
Penyelesaian ini akan mula membaca badan permintaan dan menyemak sambungan tertutup serentak, membolehkan penangkapan isyarat pembatalan tanpa mengira jenis permintaan.
Atas ialah kandungan terperinci Bagaimanakah Go Boleh Mengendalikan Pembatalan Pelanggan dalam Permintaan HTTP dengan Badan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!