優秀 Go 項目介紹: manners 優雅的關閉 HTTP server

manners

manners 爲 HTTP server 提供優雅的關閉方案. 文檔查看 DOCgit

其代碼實現很是簡潔, manners 簡單複合了 net.Listenernet.Conn, 支持經過 os.Signal 自動 shuts down, 或者由使用者觸發關閉 HTTP server.github

這裏列舉DOC中給出的方法this

經過系統信號關閉. import os/signal

<!-- 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
}

注意事項. StarRoutine 和 FinishRoutine

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

相關文章
相關標籤/搜索