Protocol buffers 任何客户端都可以从服务器生成.proto文件吗?

Protocol buffers 任何客户端都可以从服务器生成.proto文件吗?,protocol-buffers,grpc,proto,Protocol Buffers,Grpc,Proto,我已经看到,Evans CLI可用于从客户端设置确定服务器上公开的消息和会话。服务器正在使用的.proto文件(包含消息和会话详细信息)是否可以在客户端设置中生成?如果是,那么Evans如何访问这些消息 我不熟悉gRPC的概念,因此这将非常有帮助。我只知道,在GoLang中,我们使用reflector使Evans CLI能够访问消息和服务。服务器可以选择启用反射,以便您可以查看已注册的RPC和proto消息。以下是关于它的一般性宣传: 您可以使用grpc_cli(打包为grpc的一部分)获取R

我已经看到,Evans CLI可用于从客户端设置确定服务器上公开的消息和会话。服务器正在使用的.proto文件(包含消息和会话详细信息)是否可以在客户端设置中生成?如果是,那么Evans如何访问这些消息


我不熟悉gRPC的概念,因此这将非常有帮助。我只知道,在GoLang中,我们使用reflector使Evans CLI能够访问消息和服务。

服务器可以选择启用反射,以便您可以查看已注册的RPC和proto消息。以下是关于它的一般性宣传:

您可以使用grpc_cli(打包为grpc的一部分)获取RPC列表和消息protos,如下所述:

输出:

helloworld.Greeter
grpc.reflection.v1alpha.ServerReflection
message HelloRequest {
  optional string name = 1;
}
输出,其中“服务”部分显示proto的外观,并包含proto文件名

filename: helloworld.proto
package: helloworld;
service Greeter {
  rpc SayHello(helloworld.HelloRequest) returns (helloworld.HelloReply) {}
}
要获取有关消息的信息,可以使用以下命令:

$ grpc_cli type localhost:50051 helloworld.HelloRequest
输出:

helloworld.Greeter
grpc.reflection.v1alpha.ServerReflection
message HelloRequest {
  optional string name = 1;
}
grpc_cli是随grpc打包的官方工具。Evans CLI是使用公共API生成相同信息的第三方客户端。只要服务器导出它,您就可以在代码中(第一个链接也包含指向其他语言的指针)、在使用grpc_cli的脚本中或使用第三方客户端以编程方式访问它。然后,您可以获取从服务器导出的信息来创建自己的proto文件

但是,如果服务器不支持反射,那么您就倒霉了