使用http.TimeoutHandler还是ReadTimeout / WriteTimeout?

时间:2018-07-10 06:57:46

标签: go

如果我已经设置了http.TimeoutHandler ReadTimeout和WriteTimeout,是否另外使用server's有意义吗?看来这种情况是互斥的?

3 个答案:

答案 0 :(得分:2)

这两个处理HTTP请求/响应生命周期的不同方面。

http.TimeoutHandler用于限制http.Handler的执行时间。如果503未在规定时间内完成,它将返回http.Handler状态代码给客户端

ReadTimeoutWriteTimeout处理网络I / O超时,即分别向客户读取/写入请求/响应正文所需的时间

因此,http.TimeoutHandler通过包装原始处理程序来处理您的处理程序(处理http请求的代码块)需要在设定的时间内完成的情况。而当您不想无限期地等待网络读/写请求/响应时,使用http.WriteTimeouthttp.ReadTimeout

答案 1 :(得分:1)

这篇博客文章很好地解释了,但是从本质上讲,它们扮演的角色略有不同,如下所示:

enter image description here

Link to blog article

您还没有包括用例,但是希望这是足够的信息,可以做出决定。

答案 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/