如果我已经设置了http.TimeoutHandler ReadTimeout和WriteTimeout,是否另外使用server's有意义吗?看来这种情况是互斥的?
答案 0 :(得分:2)
这两个处理HTTP请求/响应生命周期的不同方面。
http.TimeoutHandler
用于限制http.Handler的执行时间。如果503
未在规定时间内完成,它将返回http.Handler
状态代码给客户端。
ReadTimeout
和WriteTimeout
处理网络I / O超时,即分别向客户读取/写入请求/响应正文所需的时间。
因此,http.TimeoutHandler
通过包装原始处理程序来处理您的处理程序(处理http请求的代码块)需要在设定的时间内完成的情况。而当您不想无限期地等待网络读/写请求/响应时,使用http.WriteTimeout
或http.ReadTimeout
。
答案 1 :(得分:1)
答案 2 :(得分:1)
如果您要裸露(直接)不使用HAproxy / Nginx的应用程序,则更改默认值可能会有所帮助,例如(根据您的要求对其进行微调):
// configure server
srv := &http.Server{
Addr: ":8080",
Handler: router,
ReadTimeout: 5 * time.Second,
WriteTimeout: 7 * time.Second,
MaxHeaderBytes: 1 << 20,
}
log.Fatal(srv.ListenAndServe())
这是一篇非常不错的文章,详细介绍了以下主题:https://blog.cloudflare.com/the-complete-guide-to-golang-net-http-timeouts/