Heim >Backend-Entwicklung >Golang >Wie erreicht man Streaming-HTTP-Antworten und deaktiviert die Pufferung in Go?
Streaming von HTTP-Antworten in Go: Deaktivieren Sie die Pufferung in http.ResponseWriter
Streaming von HTTP-Antworten ermöglicht das schrittweise Senden von Daten an den Client. anstatt darauf zu warten, dass die gesamte Anfrage verarbeitet wird. Dieser Ansatz verbessert das Benutzererlebnis, indem er sofortiges Feedback liefert und die wahrgenommene Latenz reduziert. In Go ist die http.ResponseWriter-Schnittstelle für das Senden von Antworten an den Client verantwortlich. Standardmäßig werden die Daten jedoch gepuffert, bis die Anfrage abgeschlossen ist.
Lösung: Verwenden Sie die Flusher-Schnittstelle
Um die Pufferung zu deaktivieren und Antworten zu streamen, können wir den Flusher nutzen Schnittstelle, die von einigen ResponseWriter-Typen implementiert wird. Mit der Flusher-Schnittstelle können wir alle gepufferten Daten manuell an den Client leeren.
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") }
Durch die Einbindung der Flusher-Schnittstelle können wir die gepufferten Daten nach dem Schreiben jedes Teils der Antwort explizit leeren. Dadurch wird sichergestellt, dass die Daten sofort an den Client gesendet werden, was zu einer gestreamten Antwort führt.
Alternative Lösung: Hijacking the Connection
Ein anderer Ansatz besteht darin, das zugrunde liegende TCP zu kapern Verbindung der HTTP-Anfrage. Dies ermöglicht eine direkte Interaktion mit dem Socket und eine individuelle Anpassung des Datenübertragungsprozesses, einschließlich der Deaktivierung der Pufferung. Dieser Ansatz ist jedoch komplexer und erfordert ein tieferes Verständnis der zugrunde liegenden Netzwerkschicht.
Autoflushing: Keine integrierte Funktion
Leider ist Go's http.ResponseWriter bietet keine automatische Spülfunktion. Dies bedeutet, dass der Entwickler dafür verantwortlich ist, die Daten bei Bedarf manuell zu löschen. Einige Frameworks oder Bibliotheken von Drittanbietern bieten jedoch möglicherweise Funktionen zur automatischen Spülung.
Das obige ist der detaillierte Inhalt vonWie erreicht man Streaming-HTTP-Antworten und deaktiviert die Pufferung in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!