Rumah > pembangunan bahagian belakang > Golang > Mengapa soket saya digantung dengan 502 dalam Postman dan nginX manakala Gin-Gonic mengembalikan StatusOk dalam kedua-dua kes?

Mengapa soket saya digantung dengan 502 dalam Postman dan nginX manakala Gin-Gonic mengembalikan StatusOk dalam kedua-dua kes?

王林
Lepaskan: 2024-02-09 20:27:09
ke hadapan
382 orang telah melayarinya

为什么我的 Postman 和 nginX 中的 502 上的套接字挂起,而 Gin-Gonic 在这两种情况下都返回 StatusOk?

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.

Kandungan soalan

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{})
   }
}
Salin selepas log masuk

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 挂起

Penyelesaian

Dalam 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,
    }
Salin selepas log masuk

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!

sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan