Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Menghantar Data Secara Berurutan dalam Potongan dari Pelayan HTTP Go?

Bagaimana untuk Menghantar Data Secara Berurutan dalam Potongan dari Pelayan HTTP Go?

Patricia Arquette
Lepaskan: 2024-11-29 04:30:08
asal
698 orang telah melayarinya

How to Send Data Sequentially in Chunks from a Go HTTP Server?

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))
}
Salin selepas log masuk

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!

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