Запуск серверов grp c и http одновременно - PullRequest
0 голосов
/ 16 июня 2020

Я переношу существующее http-приложение на приложение на основе GRP C. В течение некоторого времени и grp c, и http будут работать на разных портах в одном и том же файле go, и я перенесу существующую часть http-сервера в горутину. Вот как это будет выглядеть.

    main() {
        //Move existing server  into a goroutine
        go func() {
             s.server, err = chttp.NewHTTPSServer("443", s.certPath, s.keyPath, s.Router, s.options)
            if err != nil {
                log.Fatalf("server: error creating HTTP server - %v\n", err)
            }

            if err := s.server.Serve(); err != http.ErrServerClosed {
                log.Fatalf("server: run error - %v\n", err)
            }
        }

        // Add new grpc server
        lis, err := net.Listen("tcp", ":8433")
        if err != nil {
            log.Fatalf("failed to listen: %v", err)
        }
        a := grpc.NewServer()
        pb.RegisterNewServer(a, &test.GrpcServer{})
        if err := a.Serve(lis); err != nil {
            log.Fatalf("failed to serve: %v", err)
        }

    }

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

1 Ответ

0 голосов
/ 16 июня 2020

Да, вполне нормально запускать серверы gRP C и HTTP из одного и того же двоичного файла, если порты разные.

Но, конечно, если эти два сервера делают разные вещи, лучше разделить его.

И если вы хотите сделать то же самое для обоих серверов, обычно используется https://github.com/grpc-ecosystem/grpc-gateway. Он считывает ваши определения protobuf и генерирует обратный прокси-сервер для преобразования HTTP API в gRP C.

...