Maison >développement back-end >Golang >Comment fermer correctement une requête HTTP pour le traitement en arrière-plan dans Go ?

Comment fermer correctement une requête HTTP pour le traitement en arrière-plan dans Go ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-29 21:19:301026parcourir

How to Properly Close an HTTP Request for Background Processing in Go?

Comment clôturer correctement une demande de traitement en arrière-plan

Introduction

Lorsque vous répondez à des requêtes HTTP, vous devrez peut-être traiter la charge utile en arrière-plan tout en répondant par une réponse non bloquante. Ceci peut être réalisé en fermant la demande et en démarrant une goroutine pour continuer le traitement.

Fermeture de la réponse avec 202 Acceptée

Dans l'exemple de code fourni, vous définissez le code d'état sur 202 Accepté pour indiquer que la demande est acceptée pour le traitement en arrière-plan. Pour fermer correctement la requête, vous pouvez simplement écrire l'en-tête et démarrer la goroutine, comme indiqué ci-dessous :

<code class="go">func index(w http.ResponseWriter, r *http.Request) {
    w.WriteHeader(http.StatusAccepted)
    go sleep()
}</code>

Retour du gestionnaire de requêtes

Certains développeurs recommandent de revenir du gestionnaire de requête après avoir écrit l'en-tête et démarrer la goroutine. Toutefois, cela n’est pas nécessaire et peut être omis. Le retour du gestionnaire signale automatiquement l'achèvement de la requête et libère les ressources qui lui sont allouées.

Statut HTTP 200 OK

Si vous avez l'intention de renvoyer un code d'état 200 OK, vous pouvez simplement appeler le sleep fonction sans définir le code d’état. Si aucun en-tête n'est défini, 200 OK sera défini automatiquement par le serveur.

Bonne pratique

La meilleure pratique pour clôturer une demande de traitement en arrière-plan est d'écrire l'en-tête et de démarrer la goroutine, comme démontré dans le code suivant :

<code class="go">func index(w http.ResponseWriter, r *http.Request) {
    w.WriteHeader(http.StatusAccepted)
    go sleep()
}</code>

N'oubliez pas d'éviter d'utiliser les valeurs http.ResponseWriter ou httpRequest dans la goroutine simultanée après le retour du gestionnaire, car elles peuvent être réutilisées par le serveur.

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