如何在一次运行中多次停止和启动 gin 服务器

我正在编写一个程序,当我的程序运行时,我需要多次启动和停止我的服务器(在这种情况下使用 Gin 框架),


停止 gin 服务器本身需要一个技巧,我在这个问题中发现了一个技巧: Graceful stop of gin server


但是这种方法会阻止我的程序在未来启动 gin 服务器,根据http.Server.Shutdown()方法的文档说:


一旦在服务器上调用了 Shutdown,就不能再使用它;以后对 Serve 等方法的调用将返回 ErrServerClosed。


我确实需要将来的电话。


附加信息


纤维可以很容易地处理这种情况,但我想用杜松子酒来做。


我想要这样的纤维代码:


  fiber := NewFiberApp()

  fiber.RegisterRoutes()

  fiber.Start() // Calls fiber.Listen() Under the hood

  fiber.Stop() // Calls fiber.Shutdown() Under the hood

  fiber.Start()

  fiber.Stop()

  fiber.Start()

它按我的预期工作。


开心每一天1111
浏览 138回答 2
2回答

皈依舞

您需要从头开始创建服务器结构!不能再使用关闭http.Server。func serve() *http.Server {    router := gin.Default()    router.GET("/", func(c *gin.Context) {        time.Sleep(5 * time.Second)        c.String(http.StatusOK, "Welcome Gin Server\n")    })    srv := &http.Server{        Addr:    ":8080",        Handler: router,    }    go func() {        // service connections        if err := srv.ListenAndServe(); err != nil {            log.Printf("listen: %s\n", err)        }    }()    return srv}func main() {    {        srv := serve()        time.Sleep(time.Second * 3)        fmt.Println("down", srv.Shutdown(context.Background()))    }    {        time.Sleep(time.Second * 3)        fmt.Println("up", serve())    }    select {}}

慕婉清6462132

我尝试了很多方法,最后写了一篇文章,这将帮助您解决问题: https ://dev.to/arshamalh/trying-to-shutdown-a-gin-server-goroutines-and-channels-提示-gf3
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go