Rumah > pembangunan bahagian belakang > Golang > Mengapa Pakej `http` Go terlepas Isyarat Pembatalan dalam Permintaan POST dengan Badan?

Mengapa Pakej `http` Go terlepas Isyarat Pembatalan dalam Permintaan POST dengan Badan?

Linda Hamilton
Lepaskan: 2024-12-11 06:17:09
asal
149 orang telah melayarinya

Why Does Go's `http` Package Miss Cancellation Signals in POST Requests with Bodies?

Pakej Go http: Tangkap Isyarat Pembatalan dalam Permintaan dengan Badan

Soalan: Mengapa pakej Go http gagal menangkap isyarat pembatalan untuk POST permintaan dengan badan?

Jawapan: Pelayan http Go membaca badan permintaan untuk mengesan apabila pelanggan menutup sambungan. Sehingga badan dibaca, tiada semakan untuk sambungan tertutup dibuat.

Oleh itu, untuk mengendalikan perkara ini dengan betul, baca badan permintaan secepat mungkin, walaupun ia tidak diperlukan dalam logik pengendalian permintaan.

Penyelesaian:

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 the closed connection
    time.Sleep(30 * time.Second)
    fmt.Fprintf(w, "Hi there, I love %s!\n", r.URL.Path[1:])
}
Salin selepas log masuk

Apabila pelanggan menutup sambungan awal, kod ini akan mengesannya dan membatalkan sebarang sambungan yang sedang berjalan. kerja.

Atas ialah kandungan terperinci Mengapa Pakej `http` Go terlepas Isyarat Pembatalan dalam Permintaan POST dengan Badan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan