gpt4 book ai didi

go - 如何实现服务器端超时? (对 http.Server 超时感到困惑)

转载 作者:IT王子 更新时间:2023-10-29 00:47:50 26 4
gpt4 key购买 nike

我正在尝试为我的服务实现服务器端超时。如果请求时间超过 X 秒,服务器应该返回 503 Service Unavailable。

我知道这可以通过将所有端点包装在 http.TimeoutHandler 中轻松实现, 但我很困惑为什么这不是由 Timeout fields of http.Server 自动完成的

这是我用于测试的一个简单示例。如果我使用 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()
}

编辑:忘记链接我一直用作灵感的一些 Cloudflare 文章。 complete guide to golang http timeouts so you want to expose go on the internet

最佳答案

答案是使用http.TimeoutHandler。我误解了 http.Server 超时字段的用途。

关于go - 如何实现服务器端超时? (对 http.Server 超时感到困惑),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53051253/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com