douzhu1188
douzhu1188
2018-07-10 06:57

使用http.TimeoutHandler还是ReadTimeout / WriteTimeout?

已采纳

Does it make sense to additionally use http.TimeoutHandler if I already set the server's ReadTimeout and WriteTimeout? It seems as if this scenario is mutually exclusive?

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

3条回答

  • dongmi1995 dongmi1995 3年前

    These two deal with different aspects of http request/response lifecycle.

    http.TimeoutHandler is used to limit execution time of the http.Handler. it will return 503 status code to the client, if http.Handler doesn't finish in stipulated time.

    While, ReadTimeout and WriteTimeout deals with network I/O timeout, i.e time required to read/write request/response body to your client respectively.

    So, http.TimeoutHandler handles the case where your handler (code block that handles http request) need to be complete in set amount of time, by wrapping your original handler. while http.WriteTimeout or http.ReadTimeout is used when you dont want to wait for network read/write of request/response indefinitely.

    点赞 评论 复制链接分享
  • douzhi8488 douzhi8488 3年前

    If you are going to expose your app naked (directly) no HAproxy/Nginx in front, changing the defaults may help, for example (fine-tune them based on your requirements):

    // configure server
    srv := &http.Server{
        Addr:           ":8080",
        Handler:        router,
        ReadTimeout:    5 * time.Second,
        WriteTimeout:   7 * time.Second,
        MaxHeaderBytes: 1 << 20,
    }
    log.Fatal(srv.ListenAndServe())
    

    Here is a very nice article explaining more about the topic: https://blog.cloudflare.com/the-complete-guide-to-golang-net-http-timeouts/

    点赞 评论 复制链接分享
  • dpvmtdu364462 dpvmtdu364462 3年前

    This blog article does a good job of explaining, but essentially they fulfil slightly different roles, as demonstrated here:

    enter image description here

    Link to blog article

    You've not included what your usecase is, but hopefully this is enough information to be able to make a decision.

    点赞 评论 复制链接分享