为什么我们需要在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 客户端存根。
- grpCurl - curl gRPC 服务
- gRPC transcoding - 在 gRPC 服务器上公开 json API
我正在检查 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 客户端存根。
- grpCurl - curl gRPC 服务
- gRPC transcoding - 在 gRPC 服务器上公开 json API