运行 同时使用 grpc 和 http 服务器

Running grpc and http servers simultaneously

我正在将现有的 http 应用程序迁移到基于 GRPC 的应用程序。一段时间以来,grpc 和 http 都将 运行ning 在同一个 go 文件中的不同端口上,我将把现有的 http 服务器部分移动到一个 goroutine 中。这就是它的样子。

    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)
        }

    }

这会导致任何问题吗,grpc、http 服务器可以同时来自同一个程序 运行 吗?我不确定它是否会导致一些我不知道的问题。

是的,运行 从同一个二进制文件到 gRPC 和 HTTP 服务器是完全可以的,只要端口不同。

当然,如果这两个服务器在做不同的事情,最好将其分开。

如果您想对两台服务器执行相同的操作,通常使用 https://github.com/grpc-ecosystem/grpc-gateway。它读取您的 protobuf 定义并生成反向代理服务器以将 HTTP API 转换为 gRPC。