Heim > Backend-Entwicklung > Golang > Wie kann Go mit Client-Abbrüchen in HTTP-Anfragen mit Textkörpern umgehen?

Wie kann Go mit Client-Abbrüchen in HTTP-Anfragen mit Textkörpern umgehen?

Mary-Kate Olsen
Freigeben: 2024-12-07 00:50:11
Original
866 Leute haben es durchsucht

How Can Go Handle Client Cancellations in HTTP Requests with Bodies?

Client-Abbruch mit HTTP-Anforderungskörpern in Go

Bei der Verarbeitung von HTTP-Anfragen ist es wichtig, auf Client-Abbruchsignale für Graceful reagieren zu können Ressourcenmanagement. Obwohl das Kontextpaket von Go einen Mechanismus zum Erfassen von Abbrüchen bietet, verhält es sich in bestimmten Szenarien möglicherweise nicht wie erwartet.

Warum sich GET- und POST-Anfragen unterscheiden

Der Verhaltensunterschied zwischen GET und POST-Anfragen ergeben sich aus der Art und Weise, wie die Anfragen durch HTTP verarbeitet werden Server.

  • GET: GET-Anfragen haben keinen Anfragetext, sodass der Server sofort mit der Verarbeitung der Anfrage beginnen kann.
  • POST: POST-Anfragen haben einen Anfragetext und der Server muss warten, bis er den vollständigen Text erhält, bevor er ihn verarbeitet Anfrage.

Stornierung mit Anforderungstexten erfassen

Um Stornierungssignale für Anfragen mit Texten zu erfassen, ist es wichtig, umgehend mit dem Lesen des Anforderungstexts zu beginnen. Der HTTP-Server von Go prüft nur dann auf geschlossene Verbindungen, wenn die Anwendung aus dem Anforderungstext liest.

Lösung:

Um sicherzustellen, dass Abbruchsignale so früh wie möglich erfasst werden, ändern Sie die Der Anforderungshandler beginnt sofort mit dem Lesen des Anforderungstexts:

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 to detect closed connections
    time.Sleep(30 * time.Second)
    fmt.Fprintf(w, "Hi there, I love %s!\n", r.URL.Path[1:])
}
Nach dem Login kopieren

Diese Lösung beginnt mit dem Lesen des Anforderungstexts und prüft gleichzeitig auf geschlossene Verbindungen, wodurch die Erfassung von ermöglicht wird Stornierungssignale unabhängig vom Anfragetyp.

Das obige ist der detaillierte Inhalt vonWie kann Go mit Client-Abbrüchen in HTTP-Anfragen mit Textkörpern umgehen?. 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