优秀 Go 项目介绍: manners 优雅的关闭 HTTP server

manners

manners 为 HTTP server 提供优雅的关闭方案. 文档查看 DOC

其代码实现非常简洁, manners 简单复合了 net.Listenernet.Conn, 支持通过 os.Signal 自动 shuts down, 或者由使用者触发关闭 HTTP server.

这里列举DOC中给出的方法

通过系统信号关闭. 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 时候需要这样使用

<!-- 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个注意事项, 一共就这么多.

转载于:https://my.oschina.net/achun/blog/150211

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值