Pergi Konteks http dan Permintaan Pembatalan dengan Permintaan POST
Apabila pelanggan menghantar permintaan GET tanpa badan, pelayan dapat mengesan isyarat pembatalan apabila pelanggan menutup sambungan. Ini dicapai dengan membaca badan permintaan dan mengesan apabila pelanggan telah memutuskan sambungan.
Walau bagaimanapun, apabila pelanggan menghantar permintaan POST dengan badan permintaan, pelayan tidak dapat mengesan isyarat pembatalan dengan segera. Ini kerana pelayan tidak mula membaca badan permintaan sehingga aplikasi secara eksplisit melakukannya. Akibatnya, pelayan tidak dapat menangkap isyarat pembatalan sehingga tarikh akhir permintaan telah dipenuhi.
Untuk menangani isu ini dan mengendalikan pembatalan dengan betul menggunakan pakej konteks Go, baca isi permintaan dengan segera . Ini memastikan pelayan dapat mengesan apabila pelanggan telah memutuskan sambungan dan boleh membatalkan sebarang kerja yang tidak perlu secepat mungkin. Dengan membaca kandungan permintaan POST, anda mencetuskan semakan sambungan pelayan untuk mula membaca sambungan dan mengesan sambungan tertutup.
Berikut ialah contoh cara mengubah suai kod untuk membaca kandungan permintaan dan menangkap isyarat pembatalan 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 time.Sleep(30 * time.Second) fmt.Fprintf(w, "Hi there, I love %s!\n", r.URL.Path[1:]) }
Dengan membaca kandungan permintaan secara eksplisit, pelayan boleh mengesan isyarat pembatalan sebaik sahaja pelanggan menutup sambungan, membenarkan keluaran sumber tepat pada masanya di bahagian pelayan.
Atas ialah kandungan terperinci Bagaimanakah Pakej Konteks Go Boleh Meningkatkan Pengendalian Pembatalan Permintaan POST?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!