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

时间:2019-07-19 10:14:02

标签: protocol-buffers grpc proto

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

我对gRPC的概念并不陌生,所以这将非常有帮助。我唯一了解的是,在GoLang中,我们使用反射器使Evans CLI能够访问消息和服务。

1 个答案:

答案 0 :(得分:0)

服务器可以选择启用反射,以便您可以查看已注册的RPC和原始消息。这是关于它的一般说明:

https://github.com/grpc/grpc/blob/master/doc/server-reflection.md

您可以使用grpc_cli(它是gRPC的一部分包装)来获取RPC列表和消息原型,如下所述:

https://grpc.github.io/grpc/cpp/md_doc_server_reflection_tutorial.html

$ grpc_cli ls localhost:50051

输出:

helloworld.Greeter
grpc.reflection.v1alpha.ServerReflection
$ grpc_cli ls localhost:50051 helloworld.Greeter -l

输出,其中“服务”部分显示原型的外观,并且还包含原型文件名。

filename: helloworld.proto
package: helloworld;
service Greeter {
  rpc SayHello(helloworld.HelloRequest) returns (helloworld.HelloReply) {}
}

要获取有关消息的信息,可以使用以下方法:

$ grpc_cli type localhost:50051 helloworld.HelloRequest

输出:

message HelloRequest {
  optional string name = 1;
}

grpc_cli是grpc打包的官方工具。 Evans CLI是使用公共API生成相同信息的第三方客户端。只要服务器将其导出,就可以使用grpc_cli或第三方客户端的脚本,通过代码(第一个链接也包含指向其他语言的指针)以编程方式对其进行访问。然后,您可以使用从服务器导出的信息来创建自己的原型文件。

但是,如果服务器不支持反射,那您就不走运了。