Maison >développement back-end >Golang >Comment envoyer des données séquentiellement en morceaux à partir d'un serveur HTTP Go ?
Utiliser des morceaux pour envoyer des données de manière séquentielle à partir d'un serveur Go
Lors de la création d'un serveur HTTP dans Go, il peut être utile d'envoyer une réponse en morceaux, permettant aux données d'être envoyées progressivement au fur et à mesure de leur récupération. Cela permet aux clients de recevoir des données de manière séquentielle.
Cependant, si un client ne reçoit des morceaux qu'à la fin d'une durée prédéterminée, ou si Go définit automatiquement l'en-tête Content-Length, cela peut être frustrant. . Pour remédier à cela, nous devons approfondir les nuances des réponses HTTP fragmentées dans Go.
Tout d'abord, il est important de se rappeler que l'en-tête Transfer-Encoding est implicitement géré par l'éditeur de réponse HTTP de Go. Par conséquent, vous n'avez pas besoin de le définir explicitement.
La clé pour obtenir une livraison séquentielle de morceaux réside dans l'utilisation de Flusher.Flush(). En appelant cette méthode après l'écriture de chaque fragment, nous déclenchons un encodage « fragmenté » et envoyons les données au client. Cela garantit que le client reçoit chaque morceau dès qu'il est prêt.
Voici un exemple de mise en œuvre de cette technique :
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)) }
En utilisant cette approche, vous pouvez vous assurer que votre serveur Go HTTP envoie des morceaux de manière séquentielle, permettant aux clients de recevoir des données en temps opportun. De plus, il est essentiel de se rappeler que http.ResponseWriters prend en charge l'accès simultané pour une utilisation par plusieurs goroutines. Cela vous permet d'envoyer des morceaux de différents threads ou goroutines si nécessaire.
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!