为什么我们需要在gRPC服务器上注册反射服务

Nar*_*esh 8 reflection grpc

我正在浏览gRPC服务器的这段代码.谁能告诉我这里使用反射的必要性

代码:

func main() {
    lis, err := net.Listen("tcp", port)
    if err != nil {
        log.Fatalf("failed to listen: %v", err)
    }
    s := grpc.NewServer()
    pb.RegisterGreeterServer(s, &server{})
    // Register reflection service on gRPC server.
    reflection.Register(s)
    if err := s.Serve(lis); err != nil {
        log.Fatalf("failed to serve: %v", err)
    }
}
Run Code Online (Sandbox Code Playgroud)

men*_*anl 13

运行helloworld示例不需要服务器反射.

helloworld示例也用作服务器反射示例,这就是您在那里看到反射注册代码的原因.

有关服务器反射的更多信息:服务器反射是一种定义的服务,用于提供有关gRPC服务器上可公开访问的gRPC服务的信息.可在此处获得教程:https://github.com/grpc/grpc-go/blob/master/Documentation/server-reflection-tutorial.md


swa*_*ina 5

基于服务器的反射是您不需要构建日常 gRPC API 的东西。

这是一条特殊指令,它在 gRPC 服务器上公开所有可公开访问的 gRPC 服务。
这实质上意味着任何人都可以请求您的 gRPC 服务器发出 RPC 服务方法、请求-响应结构的详细信息。

这是用在什么地方?
这用于您想要的地方。动态调用 gRPC API。动态我的意思是,客户端不需要保存原始数据结构并注册 RPC 客户端存根。