在一个 Go 应用程序中提供 gRPC 和 Restful 服务

Serve gRPC and Restful service in one single Go App

我有一个用 Go 制作的 restful 应用程序,现在我必须让这个应用程序也充当 gRPC 服务器(我已经创建了所需的文件)。我在端口 8000 中有 restful 个端点 运行,现在我有下一个问题:

  1. 我可以在同一个实例中同时使用 grpc 和 restful 应用程序吗?
  2. 我应该分配一个不同的端口来服务 gRPC 吗?
  3. 在这种情况下推荐的方法是什么?因为 grpc 存根将只是 由我们的一些微服务使用,但 restful 将是 被一些应用程序的前端消耗
  4. 如果我可以同时为两者提供服务,我应该如何初始化服务器?
  1. 是的!如果您想将 gRPC 作为 RESTful 服务提供,有一个 gRPC Gateway 项目允许您注释 Protos,因此它们可以通过 REST 提供。

  2. 是的,但这有点棘手。 Go 中的 gRPC 服务器实现了 net/http.Handler,因此您可以将其添加到现有的 HTTP 服务器中。让 URL 路径匹配是您需要尝试的事情,但这当然是可能的。

  3. 我认为没有任何推荐的方法。这主要取决于环境限制(例如是否有代理、您如何加密连接等)。

  4. 先初始化gRPC Server,再添加到HTTP server。