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

Reflection 为什么我们需要在gRPC服务器上注册反射服务,reflection,grpc,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

我正在检查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)
    }
}

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

helloworld示例也用作服务器反射示例,这就是为什么您会在那里看到反射注册代码

有关服务器反射的详细信息:
服务器反射是一种定义为提供有关gRPC服务器上可公开访问的gRPC服务的信息的服务。此处提供的教程:

基于服务器的反射不需要构建日常gRPC API

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

这在哪里使用?
这是用在你想去的地方。动态调用GRPCAPI。我的意思是,客户机不需要持有proto数据结构并注册RPC客户机存根

  • -gRPC服务
  • -在gRPC服务器上公开json API
如果err:=s.Serve(lis),则反射.寄存器;呃!=nil{log.Fatalf(“未能送达:%v”,err)}
因此,我可以安全地删除此代码,对吗?