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.
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>
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.
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.
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!