Menggunakan Potongan untuk Menghantar Data Secara Berurutan daripada Pelayan Go
Apabila membuat pelayan HTTP dalam Go, mungkin berguna untuk menghantar respons dalam ketulan, membenarkan data dihantar secara beransur-ansur apabila ia diambil. Ini membolehkan pelanggan menerima data secara berurutan.
Walau bagaimanapun, jika pelanggan hanya menerima ketulan pada penghujung tempoh yang telah ditetapkan, atau jika Go secara automatik menetapkan pengepala Panjang Kandungan, ia boleh mengecewakan . Untuk membetulkan perkara ini, kita perlu menyelidiki nuansa respons HTTP terkumpul dalam Go.
Pertama sekali, adalah penting untuk diingat bahawa pengepala Pengekodan Pemindahan dikendalikan secara tersirat oleh penulis respons HTTP Go. Oleh itu, anda tidak perlu menetapkannya secara eksplisit.
Kunci untuk mencapai penghantaran bahagian berjujukan terletak pada penggunaan Flusher.Flush(). Dengan memanggil kaedah ini selepas setiap bahagian ditulis, kami mencetuskan pengekodan "potongan" dan menghantar data kepada pelanggan. Ini memastikan pelanggan menerima setiap bahagian kerana ia sudah sedia.
Berikut ialah contoh cara melaksanakan teknik ini:
import ( "fmt" "io" "log" "net/http" "time" ) func main() { http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { flusher, ok := w.(http.Flusher) if !ok { panic("expected http.ResponseWriter to be an http.Flusher") } w.Header().Set("X-Content-Type-Options", "nosniff") for i := 1; i <= 10; i++ { fmt.Fprintf(w, "Chunk #%d\n", i) flusher.Flush() // Trigger "chunked" encoding and send a chunk... time.Sleep(500 * time.Millisecond) } }) log.Print("Listening on localhost:8080") log.Fatal(http.ListenAndServe(":8080", nil)) }
Dengan menggunakan pendekatan ini, anda boleh memastikan pelayan Go HTTP anda menghantar potongan secara berurutan, membolehkan pelanggan menerima data tepat pada masanya. Selain itu, adalah penting untuk diingat bahawa http.ResponseWriters menyokong akses serentak untuk digunakan oleh berbilang goroutine. Ini membolehkan anda menghantar potongan daripada benang atau goroutin yang berbeza jika perlu.
Atas ialah kandungan terperinci Bagaimana untuk Menghantar Data Secara Berurutan dalam Potongan dari Pelayan HTTP Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!