如何在 http.TimeoutHandler 中使用 gorilla mux

在用 go 编写的 HTTP 服务器中,我使用gorilla/mux进行路由,
我想使用http.TimeoutHandler(和/或其他“中间件”),但我不明白我可以在哪里安装它们。

要说清楚:

  1. 我创建了一个新的路由器 gorillaMux := mux.NewRouter()

  2. 通过调用添加我的路线 gorillaMux.HandleFunc("/", rootHandler)

  3. 我通过server := &http.Server{Addr:":1234"}和创建服务器server.ListenAndServe()

我可以在哪里插入http.TimeoutHandler或任何其他中间件?


森林海
浏览 240回答 2
2回答

慕森卡

此解决方案不回答使用 TimeoutHandler。我在这里发布了这个以防有人想要对他们的服务器超时进行细粒度控制。如果需要,这种替代方法将允许定义 IdleTimeout 和 RequestHeaderTimeout。在这个例子中,我同时使用了 gorilla/mux 和 gorilla/handlers。希望能帮助到你。// ReadTimeout is a timing constraint on the client http request imposed by the server from the moment// of initial connection up to the time the entire request body has been read.// [Accept] --> [TLS Handshake] --> [Request Headers] --> [Request Body] --> [Response]// WriteTimeout is a time limit imposed on client connecting to the server via http from the// time the server has completed reading the request header up to the time it has finished writing the response.// [Accept] --> [TLS Handshake] --> [Request Headers] --> [Request Body] --> [Response]func main() {    mux := router.EpicMux()    srv := &http.Server{        Handler:      handlers.LoggingHandler(os.Stdout, mux),        Addr:         "localhost:8080",        WriteTimeout: 15 * time.Second,        ReadTimeout:  15 * time.Second,    }    log.Fatal(srv.ListenAndServe())}func EpicMux() http.Handler {    r := mux.NewRouter()    r.HandleFunc("/", BaseURLRouter).Methods(http.MethodGet)    // create the subroutes for v1 and v2    v1 := r.PathPrefix("api/v1").Subrouter()    // register handlers to appropriate version    v1.HandleFunc("/person", PersonHandlerV1).Methods(http.MethodPost)    v2 := r.PathPrefix("api/v2").Subrouter()    v2.HandleFunc("/person",    PersonHandlerV2).Methods(http.MethodPost)    return r}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go