Menstrim Respons HTTP dalam Go: Lumpuhkan Penimbalan dalam http.ResponseWriter
Respons HTTP penstriman membenarkan data dihantar kepada pelanggan secara berperingkat, daripada menunggu seluruh permintaan diproses. Pendekatan ini meningkatkan pengalaman pengguna dengan memberikan maklum balas segera dan mengurangkan kependaman yang dirasakan. Dalam Go, antara muka http.ResponseWriter bertanggungjawab untuk menghantar respons kepada pelanggan. Walau bagaimanapun, secara lalai, ia menimbal data sehingga permintaan selesai.
Penyelesaian: Gunakan Antara Muka Flusher
Untuk melumpuhkan penimbalan dan respons strim, kami boleh memanfaatkan Flusher antara muka yang dilaksanakan oleh beberapa jenis ResponseWriter. Antara muka Flusher membolehkan kami mengepam mana-mana data penimbal secara manual kepada pelanggan.
import ( "fmt" "log" "net/http" "time" ) func handle(res http.ResponseWriter, req *http.Request) { fmt.Fprintf(res, "sending first line of data") // Check if ResponseWriter implements Flusher interface if f, ok := res.(http.Flusher); ok { f.Flush() } else { log.Println("Damn, no flush") } time.Sleep(10 * time.Second) // Simulate a delay fmt.Fprintf(res, "sending second line of data") }
Dengan menggabungkan antara muka Flusher, kami boleh mengepam data penimbal secara eksplisit selepas menulis setiap bahagian jawapan. Ini memastikan bahawa data dihantar dengan segera kepada pelanggan, menghasilkan respons yang distrim.
Penyelesaian Alternatif: Rampas Sambungan
Pendekatan lain ialah merampas TCP yang mendasari sambungan permintaan HTTP. Ini membolehkan interaksi langsung dengan soket dan penyesuaian proses pemindahan data, termasuk melumpuhkan penimbalan. Walau bagaimanapun, pendekatan ini lebih kompleks dan memerlukan pemahaman yang lebih mendalam tentang lapisan rangkaian asas.
Autoflushing: Bukan Ciri Terbina dalam
Malangnya, http.ResponseWriter Go tidak menyediakan ciri autoflush. Ini bermakna pembangun bertanggungjawab untuk membersihkan data secara manual mengikut keperluan. Walau bagaimanapun, sesetengah rangka kerja atau perpustakaan pihak ketiga mungkin menawarkan keupayaan autoflushing.
Atas ialah kandungan terperinci Bagaimana untuk Mencapai Respons HTTP Penstriman dan Lumpuhkan Penimbalan dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!