manners 为 HTTP server 提供优雅的关闭方案. 文档查看 DOCgit
其代码实现很是简洁, manners 简单复合了 net.Listener
和 net.Conn
, 支持经过 os.Signal
自动 shuts down, 或者由使用者触发关闭 HTTP server.github
这里列举DOC中给出的方法this
<!-- lang: cpp --> func main() { handler = MyHTTPHandler() signal.Notify(manners.ShutdownChannel) manners.ListenAndServe(handler, ":7000") }
<!-- lang: cpp --> func main() { handler = MyHTTPHandler() baseListener, err := net.Listen(":7000") if err != nil { panic(err) } listener := manners.NewListener(baseListener) manners.Serve(listener, handler) } // 当须要关闭的时候,能够这样 func ShutDown(){ manners.ShutdownChannel <- syscall.SIGINT }
manners 在 shutdown 的时候要保障全部的请求都被处理完, 才能够 shutdown. 所以当你的 request handler 中要产生 Goroutine 时候须要这样使用code
<!-- lang: cpp --> func (this *MyHTTPHandler) ServeHTTP(response http.ResponseWriter, request *http.Request) { // 其余代码 go newGoroutine()() // 其余代码 } // 你的goroutine 里面须要这样 func newGoroutine() { manners.StartRoutine() go func() { defer manners.FinishRoutine() }() // 其余代码 }
2种使用方法, 1个注意事项, 一共就这么多.server