登录
首页 >  Golang >  Go问答

停止 golang 中的 Echo 服务器的 API 调用

来源:stackoverflow

时间:2024-03-25 20:36:41 247浏览 收藏

在 Golang 中使用 Echo 框架时,可以利用“优雅关闭”机制来停止服务器。通过将 err := c.echo().shutdown(context.background()) 添加到 stopServer 函数中,可以实现此目的。不过,需要注意的是,此方法将立即关闭服务器,导致客户端收到“err_connection_refused”错误。为了解决这个问题,建议在 main 函数中添加一个 recover(),以便在应用程序发生恐慌时捕获并处理异常。

问题内容

我是 golang 和 echo 框架的新手。我已经使用如下所示的代码启动了服务器,并希望在 api 命中(即 /stopserver)上停止服务器。谷歌让我更加困惑,因为我无法在 api 上找到这个。我所能看到的就是在终端中断时停止服务器。任何指示都会受到重视。

func stopServer(c echo.Context) error {
    //Some code which I am not sure about
}

func main() {
    // Echo instance
    e := echo.New()

    e.GET("/stopServer", stopServer)

    // Start server
    e.Logger.Fatal(e.Start(":1323"))
}

我还想在 http://localhost:1323/stopserver 上打印消息,说 “服务器已成功停止”


正确答案


您可以按照“graceful shutdown recipe”源代码进行操作。

echo Graceful Shutdown Recipe

more option

并参考以下代码片段

package main
import (
    "context"
    "github.com/labstack/echo/v4"
    "net/http"
)
func stopserver(c echo.context) error {
    err := c.echo().shutdown(context.background())
    if err != nil {
        if err != http.errserverclosed {
            c.echo().logger.fatal("shutting down the server")
        }
}
    return nil
}
func main() {
    e := echo.new()
    e.get("/stopserver", stopserver)
    e.logger.fatal(e.start(":1323"))
}

但是,这将立即关闭回显服务器,并将“err_connection_refused”返回给客户端。

关于 err := c.echo().shutdown(context.background()) 的答案是正确的。我唯一可以添加的是 recover() 而不是应用程序恐慌。像这样的事情:

func main() {
defer func() {
        if r := recover(); r != nil {
            fmt.Println("host finished")
        }
    }()
    e := echo.New()
    e.GET("/stopServer", stopServer)
    e.Logger.Fatal(e.Start(":1323"))
}

终于介绍完啦!小伙伴们,这篇关于《停止 golang 中的 Echo 服务器的 API 调用》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布Golang相关知识,快来关注吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>