HTTP&;同时

HTTP&;同时,http,go,rpc,Http,Go,Rpc,我正在尝试在我的系统中实现rpc和http服务器。 因此,为了同时监听服务器,我运行了2个goroutines 这是一个密码 func main() { // Recovering all errors during the process defer errorHandler() wg.Add(2) go RPCConnect() fmt.Println("Listening for RPC 127.0.0.1:" + config.rpcPo

我正在尝试在我的系统中实现
rpc
http
服务器。 因此,为了同时监听服务器,我运行了2个
goroutines
这是一个密码

func main() {
    // Recovering all errors during the process
    defer errorHandler()

    wg.Add(2)

    go RPCConnect()

    fmt.Println("Listening for RPC   127.0.0.1:" + config.rpcPort)

    go HTTPConnect()

    fmt.Println("Listening for HTTP  127.0.0.1:" + config.httpPort)

    wg.Wait()
}


func RPCConnect() {
    err := rpc.Register(pool)

    if err != nil {
        panic(err)
    }

    rpc.HandleHTTP()

    listener, e := net.Listen("tcp", ":"+config.rpcPort)
    if e != nil {
        panic(e)
    }
    err = http.Serve(listener, nil)
    if err != nil {
        panic(err)
    }
}

func HTTPConnect() {

    var httpPool HTTPPool

    r := mux.NewRouter()
    r.HandleFunc("/create", httpPool.Create).Methods("POST")
    r.HandleFunc("/generate", httpPool.Generate).Methods("POST")
    r.HandleFunc("/list", httpPool.List).Methods("GET")
    r.HandleFunc("/delete", httpPool.Delete).Methods("POST")

    err := http.ListenAndServe("localhost:"+config.httpPort, r)

    if err != nil {
        panic(err)
    }

}
我不知道这是不是最好的方法。谁能告诉我更简单灵活的方法


如果问题不相关,我提前道歉。建议的方法很好

如果您只想使用一个端口而不是两个端口,有几种第三方工具可以实现这一点:

(一)


2)

这很好,只是不需要使用
sync.WaitGroup
http.service
/
http.listendandserve
仅在出错时返回。根据您的情况,替代解决方案可能是通过以下方式将两个进程并排部署:a)创建两个二进制文件(
cmd/http
cmd/rpc
),或b)创建一个二进制文件,但使用一个标志来确定是否应在http或rpc“模式”下运行。@EmilePels谢谢!