在一个 Go 应用程序中提供 gRPC 和 Restful 服务
Serve gRPC and Restful service in one single Go App
我有一个用 Go 制作的 restful 应用程序,现在我必须让这个应用程序也充当 gRPC 服务器(我已经创建了所需的文件)。我在端口 8000 中有 restful 个端点 运行,现在我有下一个问题:
- 我可以在同一个实例中同时使用 grpc 和 restful 应用程序吗?
- 我应该分配一个不同的端口来服务 gRPC 吗?
- 在这种情况下推荐的方法是什么?因为 grpc 存根将只是
由我们的一些微服务使用,但 restful 将是
被一些应用程序的前端消耗
- 如果我可以同时为两者提供服务,我应该如何初始化服务器?
是的!如果您想将 gRPC 作为 RESTful 服务提供,有一个 gRPC Gateway 项目允许您注释 Protos,因此它们可以通过 REST 提供。
是的,但这有点棘手。 Go 中的 gRPC 服务器实现了 net/http.Handler,因此您可以将其添加到现有的 HTTP 服务器中。让 URL 路径匹配是您需要尝试的事情,但这当然是可能的。
我认为没有任何推荐的方法。这主要取决于环境限制(例如是否有代理、您如何加密连接等)。
先初始化gRPC Server,再添加到HTTP server。
我有一个用 Go 制作的 restful 应用程序,现在我必须让这个应用程序也充当 gRPC 服务器(我已经创建了所需的文件)。我在端口 8000 中有 restful 个端点 运行,现在我有下一个问题:
- 我可以在同一个实例中同时使用 grpc 和 restful 应用程序吗?
- 我应该分配一个不同的端口来服务 gRPC 吗?
- 在这种情况下推荐的方法是什么?因为 grpc 存根将只是 由我们的一些微服务使用,但 restful 将是 被一些应用程序的前端消耗
- 如果我可以同时为两者提供服务,我应该如何初始化服务器?
是的!如果您想将 gRPC 作为 RESTful 服务提供,有一个 gRPC Gateway 项目允许您注释 Protos,因此它们可以通过 REST 提供。
是的,但这有点棘手。 Go 中的 gRPC 服务器实现了 net/http.Handler,因此您可以将其添加到现有的 HTTP 服务器中。让 URL 路径匹配是您需要尝试的事情,但这当然是可能的。
我认为没有任何推荐的方法。这主要取决于环境限制(例如是否有代理、您如何加密连接等)。
先初始化gRPC Server,再添加到HTTP server。