HTTP и RPC одновременно - PullRequest
       16

HTTP и RPC одновременно

0 голосов
/ 24 января 2019

Я пытаюсь внедрить сервер 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)
    }

}

Я не знаю, является ли это лучшим способом или нет.Может кто-нибудь сказать мне более простой и гибкий метод?

Прошу прощения заранее, если вопрос не актуален

1 Ответ

0 голосов
/ 24 января 2019

Предлагаемый подход довольно хорошо.

Если вы хотите использовать только один порт вместо двух, для этого есть несколько сторонних инструментов:

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

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

...