【问题标题】:How can we use gRPC with Flatbuffers?我们如何将 gRPC 与 Flatbuffers 一起使用?
【发布时间】:2016-03-14 06:17:07
【问题描述】:

我一直在研究 Apache Thrift、ProtoBuf 和 Flatbuffers。我在link 找到了将 gRPC 与 protobuf 一起使用的教程,但我没有找到任何将 gRPC 与 Flatbuffers 一起使用的文档。有人可以指出我的相关文件吗?我在 Google 和 Stackoverflow 上检查了它。任何帮助将不胜感激。

【问题讨论】:

    标签: grpc flatbuffers


    【解决方案1】:

    gRPC 协议与有效负载无关,但代码生成不是。由于尚未为 FlatBuffers 生成代码,因此您需要手动执行一些操作。

    细节因语言而异,但基本部分相似。例如,在 Go 中,您需要实现 Codec 并准备 InvokeNewClientStreamRegisterService 所需的描述符。在 Java 中,您需要实现 Marshaller 并为 newCalladdService 准备必要的描述符。如果您遇到问题,可以考虑在与 Protobuf 一起使用时查看为 gRPC 生成的代码。

    【讨论】:

    • 虽然它在理论上是不可知的,但实际上它不适用于不是 protobuf 的东西。这一切都会容易得多。请鼓励 gPRC 维护人员改进对裸缓冲区的支持,或直接支持 FlatBuffers。
    • 一般来说可能更容易,或者特别是对于 FlatBuffers 可能更容易?
    • 用于 FlatBuffers 或任何其他非 protobuf 的序列化系统。
    • IDL 和 codegen 确实需要随着不同的序列化程序而合理变化。改进对特定序列化程序的支持比任意序列化程序更容易。我相信我们愿意接受具体的改进建议。
    • 是的,非常欢迎任何能让它变得更容易的建议!
    【解决方案2】:

    自从第一次提出这个问题以来,已经取得了进展 a) 使 GRPC 代码生成独立于 protobuf(参见 https://github.com/grpc/grpc/pull/6130),然后将该代码生成器集成到 flatbuffers 编译器 flatchttps://github.com/google/flatbuffers/commit/48f37f9e0a04f2b60046dda7fef20a8b0ebc1a70

    这是一个非常基本的第一个实现,欢迎反馈。

    【讨论】:

    【解决方案3】:

    2017-08-17 以来,gRPC 对 flatbuffers 提供了开箱即用的支持,如其博客 https://grpc.io/blog/grpc-flatbuffers/#use-flatbuffers-as-an-idl

    中所述

    最近发布的 Flatbuffers 1.7 版引入了对 gRPC 开箱即用的真正零拷贝支持。

    链接文章中的示例命令

    flatc --cpp --grpc example.fbs
    

    【讨论】:

    猜你喜欢
    • 2017-01-25
    • 1970-01-01
    • 2020-07-12
    • 2021-08-07
    • 2022-08-07
    • 2013-02-22
    • 1970-01-01
    • 1970-01-01
    • 2021-11-13
    相关资源
    最近更新 更多