同时进行 HTTP 和 RPC

标签 http go rpc

我正在尝试在我的系统中实现 rpchttp 服务器。 所以为了同时监听服务器,我运行了 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)
    }

}

我不知道这是不是最好的方法。有人能告诉我更简单灵活的方法吗?

如果问题不相关,我提前道歉

最佳答案

建议的方法非常好。

如果您只想使用一个端口而不是两个,可以使用多种第三方工具:

1) https://github.com/soheilhy/cmux

2) https://github.com/grpc-ecosystem/grpc-gateway

关于同时进行 HTTP 和 RPC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54345370/

相关文章:

c# - 在 C# 上编写 Messenger Telegram 的难点

Android HttpResponseCache 不工作 - FileNotFoundException

windows - 为什么 "Content-Length: 0"在 POST 请求中?

html - 将数据放入Golang下拉列表

go - go中的斐波那契闭合

go - 将 mozjpeg 与其 cjpeg 一起使用比将其用作库具有更高的质量

java - 无法运行 GWT ServiceAsync

java - Storm中如何选择需要处理的流源?

.htaccess - 如何将https重定向到新域?

c - 如何从 HTTP GET 请求中获取文件名