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

标签 go grpc

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

  1. 我可以在同一个实例中同时使用 grpc 和 restful 应用程序吗?
  2. 我应该分配一个不同的端口来为 gRPC 服务吗?
  3. 在这种情况下推荐的方法是什么?因为 grpc stub 将只是 被我们的一些微服务消耗,但其余的将被 被一些应用程序的前端消耗
  4. 如果我可以为两者提供服务,我应该如何初始化服务器?

最佳答案

  1. 是的!如果您想将 gRPC 作为 RESTful 服务来提供服务,可以使用 gRPC Gateway允许您注释 Protos 的项目,因此它们可以通过 REST 提供。

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

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

  4. 首先初始化gRPC Server,然后将其添加到HTTP server。

关于go - 在一个 Go 应用程序中提供 gRPC 和 Restful 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50750314/

相关文章:

go - 无法为 golang 设置 gitlab ci

pointers - Go (golang) - 方法指针是否总是根据源定义递增?

api - 在 Go 中使用 pagetoken 遍历 google places API 时遇到问题

c++ - 在 GRPC 中使用字节数组 (cpp)

asp.net-core - 通过 MapGrpcService 注册的 grpc 服务是否总是短暂的?

javascript - 访问 Node 中长时间运行进程的 grpc 流变量

go - 全局变量地址

go - 在 Go 中只返回多个返回值中的一个

javascript - 如何从 stub 函数获取返回值?

go - 如何响应多个 gRPC 客户端?