亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在一次運行中多次停止和啟動 gin 服務器

如何在一次運行中多次停止和啟動 gin 服務器

Go
開心每一天1111 2023-02-06 18:36:53
我正在編寫一個程序,當我的程序運行時,我需要多次啟動和停止我的服務器(在這種情況下使用 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()它按我的預期工作。
查看完整描述

2 回答

?
皈依舞

TA貢獻1851條經驗 獲得超3個贊

您需要從頭開始創建服務器結構!


不能再使用關閉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 {}

}


查看完整回答
反對 回復 2023-02-06
?
慕婉清6462132

TA貢獻1804條經驗 獲得超2個贊

我嘗試了很多方法,最后寫了一篇文章,這將幫助您解決問題: https ://dev.to/arshamalh/trying-to-shutdown-a-gin-server-goroutines-and-channels-提示-gf3


查看完整回答
反對 回復 2023-02-06
  • 2 回答
  • 0 關注
  • 169 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號