Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Mencapai Respons HTTP Penstriman dan Lumpuhkan Penimbalan dalam Go?

Bagaimana untuk Mencapai Respons HTTP Penstriman dan Lumpuhkan Penimbalan dalam Go?

DDD
Lepaskan: 2024-12-24 02:58:10
asal
335 orang telah melayarinya

How to Achieve Streaming HTTP Responses and Disable Buffering in Go?

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

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!

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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan