Maison >développement back-end >Golang >Comment le package contextuel de Go peut-il améliorer la gestion des annulations de demandes POST ?

Comment le package contextuel de Go peut-il améliorer la gestion des annulations de demandes POST ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-04 00:12:11451parcourir

How Can Go's Context Package Improve POST Request Cancellation Handling?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn