Menstrim Respons HTTP dalam Go
Dalam Go, secara lalai, respons HTTP ditimbal dan dihantar kepada klien sekaligus, sekali permintaan diproses sepenuhnya. Ini boleh menjadi masalah apabila anda ingin menstrim data kepada pelanggan apabila ia tersedia, seperti apabila menjana fail besar atau menstrim data masa nyata.
Untuk mengurangkan perkara ini, anda boleh mengepam aliran respons secara manual selepas setiap tulis menggunakan antara muka Flusher. Mula-mula, semak sama ada ResponseWriter melaksanakan antara muka Flusher menggunakan f, ok := res.(http.Flusher). Jika ya, panggil f.Flush() untuk memaksa data dihantar kepada pelanggan dengan segera.
Walau bagaimanapun, kaedah ini hanya berfungsi untuk data yang ditulis terus kepada ResponseWriter. Jika anda menyalurkan data daripada sumber lain, seperti output arahan, anda mungkin perlu melakukan kerja tambahan untuk memastikan data distrim dengan betul.
Satu pendekatan ialah mencipta goroutine yang membaca daripada sumber data dan menulisnya kepada ResponseWriter, membuang data selepas setiap penulisan. Ini membolehkan anda menstrim data tanpa perlu mengurus sendiri penimbalan secara manual.
Pilihan lain ialah menggunakan perampas untuk mengambil alih sambungan TCP asas permintaan HTTP. Ini memberi anda akses terus kepada strim rangkaian dan membolehkan anda menghantar data tanpa sebarang penimbalan.
Akhirnya, pendekatan terbaik bergantung pada keperluan khusus aplikasi anda. Walau bagaimanapun, dengan memahami gelagat penimbalan respons HTTP dan menggunakan alatan yang tersedia, anda boleh memastikan data penstriman anda dihantar kepada pelanggan tepat pada masanya.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menstrim Respons HTTP dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!