Aller au contexte http et demander l'annulation avec les requêtes POST
Lorsqu'un client envoie une requête GET sans corps, le serveur est capable de détecter un signal d'annulation lorsque le client ferme la connexion. Ceci est accompli en lisant le corps de la requête et en détectant le moment où le client s'est déconnecté.
Cependant, lorsqu'un client envoie une requête POST avec un corps de requête, le serveur est incapable de détecter rapidement le signal d'annulation. En effet, le serveur ne commence pas à lire le corps de la requête tant que l'application ne le fait pas explicitement. Par conséquent, le serveur ne peut pas capturer le signal d'annulation tant que la date limite de la demande n'est pas respectée.
Pour résoudre ce problème et gérer correctement l'annulation avec le package contextuel Go, lisez rapidement le corps de la demande . Cela garantit que le serveur peut détecter quand le client s'est déconnecté et peut annuler tout travail inutile dès que possible. En lisant le corps d'une requête POST, vous déclenchez les vérifications de connexion du serveur pour commencer à lire la connexion et détecter une connexion fermée.
Voici un exemple de modification du code pour lire le corps de la requête et capturer le signal d'annulation rapidement :
func handler(w http.ResponseWriter, r *http.Request) { go func(done <-chan struct{}) { <-done fmt.Println("message", "client connection has gone away, request got cancelled") }(r.Context().Done()) io.Copy(ioutil.Discard, r.Body) // Read the body time.Sleep(30 * time.Second) fmt.Fprintf(w, "Hi there, I love %s!\n", r.URL.Path[1:]) }
En lisant explicitement le corps de la requête, le serveur peut détecter le signal d'annulation dès que le client ferme la connexion, permettant une libération rapide des ressources sur le serveur côté.
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!