Rumah >pembangunan bahagian belakang >Golang >Pergi: Tarikh akhir ResponseController tidak dihormati
editor php Strawberry di sini untuk memperkenalkan kepada anda tentang "Pergi: Tidak mematuhi tarikh akhir ResponseController". Dalam pembangunan perisian, ResponseController ialah pengawal biasa yang digunakan untuk mengendalikan permintaan respons. Walau bagaimanapun, kadangkala pembangun mungkin mengabaikan untuk mematuhi tarikh akhir ResponseController semasa menulis kod, yang mungkin membawa kepada beberapa masalah. Artikel ini akan meneroka isu ini secara terperinci dan menyediakan penyelesaian untuk memastikan kebolehpercayaan dan kestabilan kod anda.
Saya mempunyai beberapa kod di mana saya cuba membatalkan penulisan semula kepada pelanggan jika penulisan mengambil masa terlalu lama. Saya fikir saya boleh menggunakan http.responsecontroller untuk mencapai ini kerana ia mempunyai kaedah setwritedeadline.
Malangnya, dalam kod di bawah, rw.write
tidak mengembalikan ralat selepas tarikh akhir berlalu.
Adakah cara lain untuk membatalkan penulisan?
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 berkata:
setwritedeadline Tetapkan tarikh akhir untuk menulis respons. Menulis badan respons selepas tarikh akhir telah berlalu tidak akan disekat, tetapi mungkin berjaya jika data ditimbal.
Tulis kepada penulis respons dalam soalan berjaya kerana jumlah kecil data yang ditulis oleh aplikasi ditimbal.
Ralat "Balasan kosong daripada pelayan" daripada curl menunjukkan bahawa tarikh akhir dihormati apabila pelayan membuang respons kepada sambungan rangkaian asas apabila ia kembali daripada pengendali.
Gunakan setwritedeadline untuk mengelakkan pelanggan lambat.
Gunakan konteks dengan tarikh akhir untuk mengehadkan masa yang diperlukan pelayan untuk menjana respons:
65bd46fc4 FebruariAtas ialah kandungan terperinci Pergi: Tarikh akhir ResponseController tidak dihormati. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!