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.
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:]) }
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!