小编Cpt*_*ero的帖子

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

我正在尝试为我的服务实现服务器端超时。如果请求时间超过 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, …
Run Code Online (Sandbox Code Playgroud)

go

5
推荐指数
1
解决办法
1595
查看次数

标签 统计

go ×1