Maison > développement back-end > Golang > Comment puis-je abandonner les requêtes POST à ​​interrogation longue dans Go ?

Comment puis-je abandonner les requêtes POST à ​​interrogation longue dans Go ?

Mary-Kate Olsen
Libérer: 2024-11-26 00:23:13
original
823 Les gens l'ont consulté

How Can I Abort Long-Polling POST Requests in Go?

Techniques pour abandonner les requêtes d'interrogation longue dans Go

Dans le contexte d'une interrogation longue, où une connexion client-serveur est maintenue active pendant des périodes prolongées, elle peut devient nécessaire de mettre fin prématurément à la demande du côté client. Alors que la bibliothèque http.Client fournit un comportement de blocage par défaut pour les interrogations longues, la question se pose : comment une requête POST peut-elle être annulée ou abandonnée avant que la réponse ne soit entièrement reçue ?

L'approche traditionnelle consistant à appeler resp.Body .Close() pour fermer la réponse prématurément est déconseillé car cela nécessite une orchestration supplémentaire via un autre goroutine. De plus, l'utilisation de la fonction de délai d'attente de http.Transport peut ne pas correspondre au besoin d'annulations initiées par l'utilisateur.

Heureusement, l'écosystème Go a évolué pour fournir une solution plus rationalisée via http.Request.WithContext. Cela permet au client de spécifier un contexte limité dans le temps pour la demande, permettant ainsi une terminaison en douceur en réponse à des événements externes. L'extrait de code ci-dessous illustre cette approche :

// Create a new request with an appropriate context, using a deadline to terminate after a specific duration.
req, err := http.NewRequest("POST", "http://example.com", nil)
ctx, cancel := context.WithDeadline(context.Background(), time.Now().Add(5*time.Second))
req = req.WithContext(ctx)
err = client.Do(req)
if err != nil {
    // Handle the error, which may indicate a premature termination due to the context deadline.
}
Copier après la connexion

En appelant Cancel() sur l'objet contextuel, la requête peut être abandonnée à tout moment, déclenchant la fin de l'interrogation longue. Cela fournit un mécanisme fiable et efficace pour l'annulation contrôlée par l'utilisateur des requêtes HTTP POST.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal