Wie streame ich geblockte HTTP-Antworten inkrementell in Go?
Chunked HTTP-Antworten in Go streamen
Problemstellung:
Bei der Implementierung eines Go-HTTP Server, der geblockte Antworten sendet, stellt der Server alle Blöcke am Ende einer bestimmten Dauer konsistent zu, anstatt sie inkrementell zu senden. Darüber hinaus fügt Go automatisch den Content-Length-Header mit einem Wert größer als Null ein, auch wenn der Inhalt nicht im Voraus bekannt ist.
Lösung:
Zur Aktivierung der Inkrementierung Um das Senden von Chunks zu verhindern und das vorzeitige Setzen des Content-Length-Headers zu vermeiden, befolgen Sie diese Schritte:
- Eliminieren Sie Transfer-Encoding Header: Go verarbeitet automatisch den Transfer-Encoding-Header, wenn der Autor geblockte Antworten sendet. Daher besteht keine Notwendigkeit, es explizit festzulegen.
- Embrace Flush: Um jeden Block sofort nach dem Schreiben in den Antwortstream zu leeren, verwenden Sie http.ResponseWriter.Flush(). Dadurch wird die Chunk-Codierung ausgelöst und der Chunk gesendet, ohne auf den Abschluss der Antwort zu warten.
Beispielcode:
package main import ( "fmt" "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() time.Sleep(500 * time.Millisecond) } }) log.Print("Listening on localhost:8080") log.Fatal(http.ListenAndServe(":8080", nil)) }
Überprüfung:
Beim Testen des Servers mit Telnet werden Chunks angezeigt, die gesendet werden schrittweise:
$ 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 ...
Das obige ist der detaillierte Inhalt vonWie streame ich geblockte HTTP-Antworten inkrementell in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

GO Language Pack Import: Was ist der Unterschied zwischen Unterstrich und ohne Unterstrich?

Wie kann ich kurzfristige Informationsübertragung zwischen Seiten im BeEGO-Framework implementieren?

Wie konvertieren Sie die Liste der MySQL -Abfrageergebnisse in eine benutzerdefinierte Struktur -Slice in Go -Sprache?

Wie kann ich benutzerdefinierte Typ -Einschränkungen für Generika in Go definieren?

Wie schreibe ich Scheinobjekte und Stubs zum Testen in Go?

Wie schreibe ich Dateien in Go Language bequem?

Wie kann ich Tracing -Tools verwenden, um den Ausführungsfluss meiner GO -Anwendungen zu verstehen?
