Maison >développement back-end >Golang >Go : délai de ResponseController non respecté
l'éditeur php Strawberry est là pour vous présenter "Go : Non-respect du délai de ResponseController". Dans le développement de logiciels, ResponseController est un contrôleur courant utilisé pour gérer les demandes de réponse. Cependant, les développeurs peuvent parfois négliger de respecter le délai fixé par ResponseController lors de l'écriture du code, ce qui peut entraîner une série de problèmes. Cet article explorera ce problème en détail et fournira des solutions pour garantir la fiabilité et la stabilité de votre code.
J'ai un code dans lequel j'essaie d'annuler l'écriture au client si l'écriture prend trop de temps. Je pense que je peux utiliser http.responsecontroller pour y parvenir car il dispose d'une méthode setwritedeadline.
Malheureusement, dans le code ci-dessous, rw.write
ne renvoie pas d'erreur une fois le délai écoulé.
Existe-t-il un autre moyen d'annuler l'écriture ?
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 documentation dit :
setwritedeadline Fixez la date limite pour rédiger les réponses. L'écriture du corps de la réponse après la date limite ne bloquera pas, mais peut réussir si les données sont mises en mémoire tampon.
L'écriture vers l'auteur de la réponse dans la question réussit car la petite quantité de données écrites par l'application est mise en mémoire tampon.
L'erreur "Réponse vide du serveur" de curl indique que le délai est respecté lorsque le serveur vide la réponse à la connexion réseau sous-jacente lorsqu'elle revient du gestionnaire.
Utilisez setwritedeadline pour éviter la lenteur du client.
Utilisez un contexte avec une date limite pour limiter le temps nécessaire au serveur pour générer une réponse :
65bd46fc4 févrierCe qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!