Heim > Backend-Entwicklung > Golang > Wie schließe ich eine HTTP-Anfrage für die Hintergrundverarbeitung in Go ordnungsgemäß?

Wie schließe ich eine HTTP-Anfrage für die Hintergrundverarbeitung in Go ordnungsgemäß?

Barbara Streisand
Freigeben: 2024-10-29 21:19:30
Original
1026 Leute haben es durchsucht

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

So schließen Sie eine Anfrage zur Hintergrundverarbeitung ordnungsgemäß ab

Einführung

Bei der Beantwortung von HTTP-Anfragen müssen Sie die Nutzlast möglicherweise im Hintergrund verarbeiten während mit einer nicht blockierenden Antwort geantwortet wird. Dies kann erreicht werden, indem die Anfrage geschlossen und eine Goroutine gestartet wird, um die Verarbeitung fortzusetzen.

Antwortabschluss mit 202 Akzeptiert

Im bereitgestellten Codebeispiel setzen Sie den Statuscode auf 202 Akzeptiert, um dies anzuzeigen Die Anfrage wird zur Hintergrundverarbeitung angenommen. Um die Anfrage ordnungsgemäß zu schließen, können Sie einfach den Header schreiben und die Goroutine starten, wie unten gezeigt:

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

Vom Request-Handler zurückkehren

Einige Entwickler empfehlen, nach dem Schreiben vom Request-Handler zurückzukehren den Header und das Starten der Goroutine. Dies ist jedoch nicht notwendig und kann auch weggelassen werden. Die Rückkehr vom Handler signalisiert automatisch den Abschluss der Anfrage und gibt die ihr zugewiesenen Ressourcen frei.

HTTP-Status 200 OK

Wenn Sie beabsichtigen, einen 200 OK-Statuscode zurückzugeben, können Sie einfach den Ruhezustand aufrufen Funktion ohne Setzen des Statuscodes. Wenn keine Header festgelegt sind, wird vom Server automatisch 200 OK gesetzt.

Best Practice

Die beste Vorgehensweise zum Schließen einer Anfrage für die Hintergrundverarbeitung besteht darin, den Header zu schreiben und die Goroutine zu starten. wie im folgenden Code gezeigt:

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

Denken Sie daran, die Verwendung der http.ResponseWriter- oder httpRequest-Werte in der gleichzeitigen Goroutine nach der Rückkehr vom Handler zu vermeiden, da diese möglicherweise vom Server wiederverwendet werden.

Das obige ist der detaillierte Inhalt vonWie schließe ich eine HTTP-Anfrage für die Hintergrundverarbeitung in Go ordnungsgemäß?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage