【问题标题】:Can the .proto file be generated from the server by any client?任何客户端都可以从服务器生成 .proto 文件吗?
【发布时间】:2019-07-19 10:14:02
【问题描述】:

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

我是 gRPC 概念的新手,所以这将非常有帮助。我唯一知道的是,在 GoLang 中,我们使用反射器使 Evans CLI 能够访问消息和服务。

【问题讨论】:

    标签: protocol-buffers grpc proto


    【解决方案1】:

    服务器可以选择启用反射,这样您就可以看到注册的 RPC 和 proto 消息。以下是关于它的一般简介:

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

    您可以使用作为 gRPC 一部分打包的 grpc_cli 来获取 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
    

    输出,其中“服务”部分显示了 proto 应该是什么样子,并且还包含 proto 文件名。

    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 的脚本中,或使用第三方客户端。然后,您可以使用从服务器导出的信息来创建您自己的 proto 文件。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-03-19
      • 1970-01-01
      • 2016-10-23
      • 1970-01-01
      • 2012-10-09
      • 2018-06-20
      • 1970-01-01
      相关资源
      最近更新 更多