教程 > gin 教程 > 阅读:158

gin 优雅地重启或停止——迹忆客-ag捕鱼王app官网

你想优雅地重启或停止 web 服务器吗?有一些方法可以做到这一点。

我们可以使用 fvbock/endless 来替换默认的 listenandserve

router := gin.default()
router.get("/", handler)
// [...]
endless.listenandserve(":4242", router)

替代方案:

  • manners:可以优雅关机的 go http 服务器。
  • graceful:graceful是一个 go 扩展包,可以优雅地关闭 http.handler 服务器。
  • grace:go 服务器平滑重启和零停机时间部署。

如果你使用的是 go 1.8,可以不需要这些库!考虑使用 http.server 内置的 shutdown() 方法优雅地关机。 请参阅 gin 完整的 。

//  build go1.8
package main
import (
    "context"
    "log"
    "net/http"
    "os"
    "os/signal"
    "time"
    "github.com/gin-gonic/gin"
)
func main() {
    router := gin.default()
    router.get("/", func(c *gin.context) {
        time.sleep(5 * time.second)
        c.string(http.statusok, "welcome gin server")
    })
    srv := &http.server{
        addr:    ":8080",
        handler: router,
    }
    go func() {
        // 服务连接
        if err := srv.listenandserve(); err != nil && err != http.errserverclosed {
            log.fatalf("listen: %s\n", err)
        }
    }()
    // 等待中断信号以优雅地关闭服务器(设置 5 秒的超时时间)
    quit := make(chan os.signal)
    signal.notify(quit, os.interrupt)
    <-quit
    log.println("shutdown server ...")
    ctx, cancel := context.withtimeout(context.background(), 5*time.second)
    defer cancel()
    if err := srv.shutdown(ctx); err != nil {
        log.fatal("server shutdown:", err)
    }
    log.println("server exiting")
}

查看笔记

扫码一下
查看教程更方便
网站地图