• go优雅重启或停止


    想要优雅地重启或停止你的Web服务器,使用下面的方法

    我们可以使用fvbock/endless来替换默认的ListenAndServe,有关详细信息,请参阅问题#296

    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()方法进行优雅关闭,查看例子

    // +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() {
    		// service connections
    		if err := srv.ListenAndServe(); err != nil && err != http.ErrServerClosed {
    			log.Fatalf("listen: %s
    ", err)
    		}
    	}()
    
    	// Wait for interrupt signal to gracefully shutdown the server with
    	// a timeout of 5 seconds.
    	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")
    }
  • 相关阅读:
    [NOI2003]文本编辑器
    [TyvjP1413]费用流模板裸题
    POJ 3255 dijkstra次短路
    [TyvjP1474]二维线段树区间更新+查询
    [转]二分图的必须边
    匈牙利算法代码及理解
    jloi2013一些想法
    uva11987 并查集小技巧
    【水】tyvj1523 平面几何入门
    Tyvj1462 细节凸包
  • 原文地址:https://www.cnblogs.com/ExMan/p/14665244.html
Copyright © 2020-2023  润新知