L'éditeur php Yuzi répondra à une question courante pour tout le monde dans cet article : "Pourquoi mes sockets se bloquent-ils sur 502 dans Postman et nginX, alors que Gin-Gonic échoue dans les deux cas ? Return StatusOk ? » le comportement de différents cadres de réseau et serveurs. Nous analyserons les raisons et donnerons des solutions pour aider les lecteurs à résoudre des problèmes similaires.
Pour simplifier mon problème, j'ai un parcours très long qui peut prendre jusqu'à 2 minutes pour renvoyer une réponse. Voici maintenant mon exemple de gestionnaire http :
func GetHealth(svc *service.Hotel) gin.HandlerFunc { return func(c *gin.Context) { time.Sleep(30 * time.Second) c.JSON(200, gin.H{}) } }
Maintenant, quand j'appelle [GET] /health
路由邮递员返回 Error: 套接字挂起
在从 gin-gonic 返回响应的确切时间,记录了 200 Ok
:
[GIN] 2024/01/24 - 11:10:58 | 200 | 200 30.084587215s | ::1 |获取“/health”
Maintenant, avec le même projet derrière nginX comme proxy inverse, j'obtiens une erreur 502 nginX sur la réponse de l'API lorsque mon service se connecte 200 Ok
.
La question est Pourquoi est-ce que j'obtiens une erreur côté client même si gin-gonic a renvoyé une réponse avec succès ? Comment puis-je résoudre ce problème?
J'ai utilisé la bibliothèque github.com/gin-contrib/timeout
car je pensais que c'était lié aux délais d'attente de routage, mais sans succès. github.com/gin-contrib/timeout
库,因为我认为它与路由超时有关,但没有成功。
在 gin-gonic
中,您可以在 http.Server
上设置 WriteTimeout
以防止 socket 挂起
gin-gonic
, vous pouvez définir WriteTimeout
sur http.Server
pour empêcher le socket de se bloquer
ou nginx 502. 🎜
🎜Fait intéressant, même s'il expire, il enregistre toujours 200, mais le client obtient l'erreur : 🎜
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, }
Ce 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!