golang timeout的问题
需求:
golang实现proxy来做到前端请求某个url后落到proxy上,proxy再发起请求到backend server, 然后为了性能问题, 我需要考虑超时后放弃后端返回,以及提醒http client超时(504)
我的思路:
因为整个程序用到了gin以及golang http包的reverseProxy,所以我优先考虑gin的http.server参数: readtimeout
, writetimeout
,
为此我写了一段代码如下:
package main
import (
"github.com/gin-gonic/gin"
"net/http" "time"
)
func main() {
e := gin.New()
e.GET("/", func(context *gin.Context) {
time.Sleep(time.Second * 5)
context.String(300, "ssss")
})
srv := http.Server{
Addr: ":8888",
Handler: e,
ReadTimeout: 3 * time.Second,
WriteTimeout: 3 * time.Second,
}
//http.TimeoutHandler(e, time.Second * 1, "msg")
srv.ListenAndServe()
}
另我意外的是: 我请求: http://localhost:8888 后浏览器卡了10s,返回ERR_EMPTY_RESPONSE
, 同时奇怪的又自主发起了一次请求,然后还是10s无结果
我的预期结果是: http server 3s无结果writer,则超时,浏览器应该也是超时停止请求,并拿到504
所以请教下大佬们,那里出了问题
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
writeTimeout 超时会导致服务器内部返回结果的时候(
response.Write()
)不能正常写回数据,但是不会导致引起整个请求 504 ,也不会在“超时”之后终止连接。你这个前端设置timeout了?
超时应该是前端设置的