7 29

Golang - iris中通过Plugin设置http超时时间(更新:作者已经提供相关设置)

kataras/iris是一款基于valyala/fasthttp的web开发框架。注重效率,在Benchmarks对比中也表现出了速度的优势。

更新作者提供的相关设置选项

根据留言和 iris 最新的提交(3c50d26),现在只需要使用ListenTo并且配置相关选项既可以设置超时时间(需要 go get -u 升级 iris 到最新版本):

iris.ListenTo(config.Server{WriteTimeout: 5* time.Second, ReadTimeout=
5*time.Second, ListeningAddr:":8080"})

通过Plugin设置超时时间

最近学习GOLANG时阅读到Go net/http 超时机制完全手册,GO自带的 net/http 中可以使用

srv := &http.Server{  
    ReadTimeout: 5 * time.Second,
    WriteTimeout: 10 * time.Second,
}

来设置超时时间。

同样的,在 valyala/fasthttp 中也可以使用

srv := &fasthttp.Server{  
    ReadTimeout: 5 * time.Second,
    WriteTimeout: 10 * time.Second,
}

进行设置。

不过在iris中,虽然 iris.Server 是嵌入了 fasthttp.Server 不过iris在 Listen 之前是没有创建的,没法设置超时时间。 阅读iris文档和代码后发现,为给iris中的 fasthttp.Server 也设置超时时间,可以通过 iris Plugins 机制进行设置。

iris的Plugins类似于钩子、事物监听、中间件,可以在特定的情况下触发事件。我们只用在Listen之前设置超时即可达到目的了。

app.Plugins.PreListen(func(s *iris.Framework) {
    s.Servers.Main().ReadTimeout = 5 * time.Second
    s.Servers.Main().WriteTimeout = 5 * time.Second
})

同理,在其它无论是基于 net/http 还是 valyala/fasthttp 的框架中都可以看看Server具体是在什么时候创建以及有没有可能通过在Listen之前触发的事件来设置超时时间。