我已经看到,可以使用Evans CLI从客户端设置确定服务器上公开的消息和会话。服务器正在使用的.proto文件(包含消息和会话详细信息)是否可以在客户端安装程序上生成?如果是,怎么办,如果不是,那么埃文斯如何访问这些消息?
我对gRPC的概念并不陌生,所以这将非常有帮助。我唯一了解的是,在GoLang中,我们使用反射器使Evans CLI能够访问消息和服务。
答案 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或第三方客户端的脚本,通过代码(第一个链接也包含指向其他语言的指针)以编程方式对其进行访问。然后,您可以使用从服务器导出的信息来创建自己的原型文件。
但是,如果服务器不支持反射,那您就不走运了。