Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Go Boleh Mengendalikan Pembatalan Pelanggan dalam Permintaan HTTP dengan Badan?

Bagaimanakah Go Boleh Mengendalikan Pembatalan Pelanggan dalam Permintaan HTTP dengan Badan?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-07 00:50:11868semak imbas

How Can Go Handle Client Cancellations in HTTP Requests with Bodies?

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.

  • DAPATKAN: DAPATKAN permintaan tidak mempunyai badan permintaan, jadi pelayan boleh mula memproses permintaan dengan serta-merta.
  • POS: Permintaan POST mempunyai badan permintaan, dan pelayan mesti menunggu untuk menerima kandungan lengkap sebelum memproses permintaan.

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!

Kenyataan:
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