我正在尝试为我的服务实现服务器端超时。如果请求时间超过 X 秒,服务器应返回 503 Service Unavailable。
我知道这可以通过将所有端点包装在http.TimeoutHandler中轻松完成,但我很困惑为什么这不是由http.Server 的 Timeout 字段自动完成
这是我用于测试的一个简单示例。如果我 cURL 或 POSTman 这台服务器,它会永远挂起,而不是我期望的 5 秒。
package main
import (
"net/http"
"time"
)
func main() {
mux := http.NewServeMux()
mux.HandleFunc("/timeouttest", func(_ http.ResponseWriter, _ *http.Request) {
// busy infinite loop
// for { _ = struct {}{}}
// non-busy infinite loop
select {}
})
srv := &http.Server{
Addr: "localhost:5000",
Handler: mux,
ReadTimeout: 5 * time.Second,
ReadHeaderTimeout: 5 * time.Second,
WriteTimeout: 5 * time.Second,
IdleTimeout: 90 * time.Second,
}
srv.ListenAndServe()
}
Run Code Online (Sandbox Code Playgroud)
编辑:忘记链接一些我一直用作灵感的 Cloudflare 文章。 golang http 超时的完整指南 ,因此您想在互联网上公开 go