Home >Backend Development >Golang >Why do my sockets hang with 502 in Postman and nginX while Gin-Gonic returns StatusOk in both cases?
php editor Yuzi will answer a common question for everyone in this article: "Why does the socket on 502 in my Postman and nginX hang, and Gin- Gonic returns StatusOk in both cases?" This question involves differences in the behavior of different network frameworks and servers. We will analyze the reasons and give solutions to help readers solve similar problems.
To simplify my problem, I have a very long route that can take up to 2 minutes to return a response. Now here is my sample http handler:
func GetHealth(svc *service.Hotel) gin.HandlerFunc { return func(c *gin.Context) { time.Sleep(30 * time.Second) c.JSON(200, gin.H{}) } }
Now when I call [GET] /health
route postman returns Error: Socket hung
At the exact time the response comes back from gin-gonic, ## is logged #200 Ok:
[GIN] 2024/01/24 - 11:10:58 | 200 | 200 30.084587215s | ::1 |Get "/health"
200 Ok.
The question is Why am I getting an error on the client side even though gin-gonic has successfully returned a response? How can I solve this problem?
I used thegithub.com/gin-contrib/timeout library because I thought it was related to routing timeouts, but without success.
gin-gonic you can set
WriteTimeout on
http.Server to prevent
socket hangs or nginx 502.
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, }
The above is the detailed content of Why do my sockets hang with 502 in Postman and nginX while Gin-Gonic returns StatusOk in both cases?. For more information, please follow other related articles on the PHP Chinese website!