Heim >Backend-Entwicklung >Golang >Wie sende ich geblockte HTTP-Antworten von einem Go-Server?

Wie sende ich geblockte HTTP-Antworten von einem Go-Server?

Barbara Streisand
Barbara StreisandOriginal
2024-12-01 19:50:11605Durchsuche

How to Send Chunked HTTP Responses from a Go Server?

Senden Sie eine geblockte HTTP-Antwort von einem Go-Server

Lösung:

So senden Sie geblockt Um HTTP-Antworten von einem Go-Server zu erhalten und diese in Echtzeit zu empfangen, ist es notwendig, nach dem Schreiben jedes Datenblocks Flusher.Flush() aufzurufen. Dies löst die „chunked“-Codierung aus und sendet den Chunk sofort an den Client. Hier ist ein Beispiel für die Implementierung:

package main

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))
}

Überprüfung:

Mit Telnet können Sie eine Verbindung zum Server herstellen und beobachten, wie die geblockte Antwort übermittelt wird:

$ telnet localhost 8080
Trying ::1...
Connected to localhost.
Escape character is '^]'.
GET / HTTP/1.1

HTTP/1.1 200 OK
Date: Tue, 02 Jun 2015 18:16:38 GMT
Content-Type: text/plain; charset=utf-8
Transfer-Encoding: chunked

9
Chunk #1

9
Chunk #2

...

Zusätzlich Hinweise:

  • Es lohnt sich zu recherchieren, ob http.ResponseWriters den gleichzeitigen Zugriff für die gleichzeitige Verwendung durch mehrere Goroutinen unterstützen.
  • Weitere Informationen zu den „X-Content-Type-Options "-Header, konsultieren Sie diese verwandte Frage.

Das obige ist der detaillierte Inhalt vonWie sende ich geblockte HTTP-Antworten von einem Go-Server?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn