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