如何使用频道保持实时服务器命令

问题描述

我正在使用 gorilla/mux 来为我的 go 应用提供服务。为了保持那个 http 服务器的活跃,我在我的服务器命令中使用了这样的通道,如下所示。

        
&cobra.Command{
        Use:   "server",Run: func(cmd *cobra.Command,args []string) {
        
            _,_,serverErr := runServer()
            if serverErr != nil {
                panic(err)
            }

            // keep the command up and running until it gets terminated
            c := make(chan os.Signal,2)
            signal.Notify(c,syscall.SIGINT,syscall.SIGTERM)
            <-c
}

runServer 内部:

    p := conf.Server.Port
    listener,err := net.Listen("tcp",":"+p)
    if err != nil {
        return nil,nil,errors.Wrap(err,"Unable to start server")
    }

    server := &http.Server{Handler: srv}

    go func() {
        if err := server.Serve(listener); err != nil {
            fmt.Println(err)
        }
    }()

    logger.Infof("Service available at port %s",p)

    return server,listener,nil

并且我正在尝试为自动监视我的更改实施 air 并再次重新编译并运行服务器命令。

问题是当 air 重新运行服务器命令时,服务器给出端口已经使用错误,因为通道仍然有效。有什么办法可以杀死来自 cmd 的信号并再次运行,或者有其他方法可以杀死端口并再次运行吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)