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

Why do we need to register reflection service on gRPC server

我正在检查 gRPC 服务器的这段代码。谁能告诉我反射的必要性here

代码:

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)
    }
}

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

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

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

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

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

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