Maison >développement back-end >Golang >Comment diffuser des réponses HTTP fragmentées de manière incrémentielle dans Go ?
Diffusion en continu de réponses HTTP fragmentées dans Go
Énoncé du problème :
Lors de la mise en œuvre d'un protocole Go HTTP serveur qui envoie des réponses fragmentées, le serveur fournit systématiquement tous les fragments à la fin d'une durée spécifiée au lieu de les envoyer de manière incrémentielle. De plus, Go inclut automatiquement l'en-tête Content-Length avec une valeur supérieure à zéro, même lorsque le contenu n'est pas connu à l'avance.
Solution :
Pour activer l'incrémentation l'envoi de morceaux et évitez de définir l'en-tête Content-Length prématurément, suivez ces étapes :
Exemple de code :
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)) }
Vérification :
Tester le serveur à l'aide de Telnet affichera les morceaux envoyés progressivement :
$ 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 ...
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!