go - GRPC 中的请求是如何处理的?

标签 go grpc

假设我给定的 GRPC 端点具有以下实现

type HandlerFunc func(ctx context.Context, in *pb.Request) (*pb.Response, error)

func newHandler() HandlerFunc {
   func (s *Server) Process(ctx context.Context, in *pb.Request) (*pb.Response, error) {
        //do processing
    }
}

type Server struct {
    Handler handler
}

func new() (s *Server) {
   return &Server{
      handler: handlers.newHandler()
   }
}
func (s *Server) Process(ctx context.Context, in *pb.Request) (*pb.Response, error) {
    return s.handler
}

现在假设多个客户端尝试调用 Process 端点。它们是都调用同一个服务器实例的同一个 Process 函数,还是调用不同服务器实例的 Process 函数?

也是在

中定义的处理程序
func newHandler() HandlerFunc {
   func (s *Server) Process(ctx context.Context, in *pb.Request) (*pb.Response, error) {
        //do processing
    }
}

处理程序的同一个实例是否处理来自同一个客户端的多个请求?还有不同的客户呢?处理程序的同一个实例是否处理来自多个客户端的请求?

最佳答案

很抱歉,我很难理解您提供的代码。似乎 Process 是您正在为其编写服务处理程序的 RPC 调用。但是 handler 类型是什么。函数 newHandler() 也用作方法。此外,我也没有看到包装服务处理程序的需要。

我们走官方怎么样example来自 gRPC 的 github 的一元 RPC。

如果你看here ,定义了一个 gRPC 服务处理程序,它处理 SayHello RPC。

多个客户端可以多次调用此 RPC,所有调用都将在单独的 goroutine 中运行。现在,人们可能想要在这些调用之间共享一些信息是可以理解的。这可以通过使用更多逻辑扩充您的服务处理程序 type server struct 来实现,例如带有互斥锁的数据结构。

希望这能回答一些问题。

最佳 马克

关于go - GRPC 中的请求是如何处理的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49613649/

相关文章:

c++ - 从源代码构建 gRPC C++

go - 在字符串搜索中处理 Unicode

azure - Golang 通过多部分处理图像并流式传输到 Azure

go - 如何正确导入 protobuf 的文件?

c++ - 我的项目不会编译出现 undefined reference 错误,如 "undefined reference to ` grpc::g_core_codegen_interface'"

go - 如何从 gRPC 获取方法扩展

go - 尝试了解golang中gRPC客户端中 channel 的使用

git - 如何使用 go get 获取另一个分支而不是默认分支

io - 过滤掉断管错误

docker - 使用 Golang api 构建 docker 镜像时复制失败