editor php Yuzi akan menjawab soalan biasa untuk semua orang dalam artikel ini: "Mengapa soket saya digantung pada 502 dalam Posman dan nginX, manakala Gin-Gonic gagal dalam kedua-dua kes "Soalan ini melibatkan perbezaan dalam tingkah laku rangka kerja rangkaian dan pelayan yang berbeza Kami akan menganalisis sebab dan memberikan penyelesaian untuk membantu pembaca menyelesaikan masalah yang sama.
Untuk memudahkan masalah saya, saya mempunyai laluan yang sangat panjang yang boleh mengambil masa sehingga 2 minit untuk membalas respons. Sekarang inilah contoh pengendali http saya:
func GetHealth(svc *service.Hotel) gin.HandlerFunc { return func(c *gin.Context) { time.Sleep(30 * time.Second) c.JSON(200, gin.H{}) } }
Sekarang, apabila saya memanggil [GET] /health
路由邮递员返回 Error: 套接字挂起
在从 gin-gonic 返回响应的确切时间,记录了 200 Ok
:
[GIN] 2024/01/24 - 11:10:58 | 200 | 200 30.084587215s | ::1 |获取“/health”
Kini, dengan projek yang sama di belakang nginX sebagai proksi terbalik, saya mendapat ralat 502 nginX pada respons API apabila perkhidmatan saya dilog 200 Ok
.
Persoalannya ialah Mengapa saya mendapat ralat di pihak pelanggan walaupun gin-gonic telah berjaya mengembalikan respons? Bagaimanakah saya boleh menyelesaikan masalah ini?
Saya menggunakan perpustakaan github.com/gin-contrib/timeout
kerana saya fikir ia berkaitan dengan penghalaan tamat masa, tetapi tidak berjaya. github.com/gin-contrib/timeout
库,因为我认为它与路由超时有关,但没有成功。
在 gin-gonic
中,您可以在 http.Server
上设置 WriteTimeout
以防止 socket 挂起
gin-gonic
, anda boleh menetapkan WriteTimeout
pada http.Server
untuk mengelakkan soket daripada tergantung
atau nginx 502. 🎜
🎜Menariknya, walaupun masa tamat, ia sentiasa mencatatkan 200, tetapi pelanggan mendapat ralat: 🎜
srv := &http.Server{ Addr: ":9000", // Good practice to set timeouts to avoid Slowloris attacks. WriteTimeout: time.Second * 120, // THIS TIMEOUT NEEDS TO BE SET ReadTimeout: time.Second * 15, IdleTimeout: time.Second * 60, Handler: router, }
Atas ialah kandungan terperinci Mengapa soket saya digantung dengan 502 dalam Postman dan nginX manakala Gin-Gonic mengembalikan StatusOk dalam kedua-dua kes?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!