php-Editor Strawberry ist hier, um Sie über „Go: Nichteinhaltung der Frist von ResponseController“ zu informieren. In der Softwareentwicklung ist ResponseController ein gängiger Controller, der zur Verarbeitung von Antwortanfragen verwendet wird. Manchmal versäumen Entwickler jedoch, beim Schreiben von Code die Deadline des ResponseControllers einzuhalten, was zu einer Reihe von Problemen führen kann. In diesem Artikel wird dieses Problem im Detail untersucht und Lösungen bereitgestellt, um die Zuverlässigkeit und Stabilität Ihres Codes sicherzustellen.
Ich habe einen Code, mit dem ich versuche, das Zurückschreiben an den Client abzubrechen, wenn das Schreiben zu lange dauert. Ich denke, ich kann http.responsecontroller verwenden, um dies zu erreichen, da es über eine setwritedeadline-Methode verfügt.
Leider gibt rw.write
im folgenden Code nach Ablauf der Frist keinen Fehler zurück.
Gibt es eine andere Möglichkeit, das Schreiben abzubrechen?
package main import ( "log" "net/http" "time" ) func main() { http.handlefunc("/", func(rw http.responsewriter, r *http.request) { log.println(r.method, r.url.path) rc := http.newresponsecontroller(rw) dl := time.now().add(3 * time.second) if err := rc.setwritedeadline(dl); err != nil { log.println(err) return } log.println("write deadline:", dl) var total int for _, b := range []byte("what!\n") { time.sleep(time.second) n, err := rw.write([]byte{b}) if err != nil { log.println(err) return } total += n log.println("bytes written", n) } log.println(r.method, r.url.path, "write total", total) }) http.listenandserve(":8080", nil) }
$ go run main.go 2023/04/26 12:24:40 get / 2023/04/26 12:24:40 write deadline: 2023-04-26 12:24:43.303884739 -0700 pdt m=+11.5891 16304 2023/04/26 12:24:41 bytes written 1 2023/04/26 12:24:42 bytes written 1 2023/04/26 12:24:43 bytes written 1 2023/04/26 12:24:44 bytes written 1 2023/04/26 12:24:45 bytes written 1 2023/04/26 12:24:46 bytes written 1 2023/04/26 12:24:46 get / write total 6
$ curl http://localhost:8080/ curl: (52) Empty reply from server
setwritedeadline-Dokumentation sagt:
setwritedeadline Legen Sie die Frist für das Schreiben von Antworten fest. Das Schreiben des Antworttexts nach Ablauf der Frist wird nicht blockiert, kann aber erfolgreich sein, wenn die Daten gepuffert werden.
Der Schreibvorgang an den Antwortschreiber in der Frage ist erfolgreich, da die kleine von der Anwendung geschriebene Datenmenge gepuffert wird.
Der Fehler „Leere Antwort vom Server“ von Curl zeigt an, dass die Frist eingehalten wird, wenn der Server die Antwort an die zugrunde liegende Netzwerkverbindung weiterleitet, wenn sie vom Handler zurückkehrt.
Verwenden Sie setwritedeadline, um die Langsamkeit des Kunden zu verhindern.
Verwenden Sie einen Kontext mit einer Frist , um die Zeit zu begrenzen, die der Server benötigt, um eine Antwort zu generieren:
65bd46fc4 FebruarDas obige ist der detaillierte Inhalt vonLos: Frist von ResponseController nicht eingehalten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!