Heim > Backend-Entwicklung > Golang > Los: Frist von ResponseController nicht eingehalten

Los: Frist von ResponseController nicht eingehalten

王林
Freigeben: 2024-02-09 12:09:08
nach vorne
859 Leute haben es durchsucht

Go:不遵守 ResponseController 的截止日期

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.

Frageninhalt

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)
}
Nach dem Login kopieren
$ 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
Nach dem Login kopieren
$ curl http://localhost:8080/
curl: (52) Empty reply from server
Nach dem Login kopieren

Workaround

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 Februar

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

Quelle:stackoverflow.com
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage