我们如何将 gRPC 与 Flatbuffers 一起使用?

How can we use gRPC with Flatbuffers?

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

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

细节因语言而异,但基本部分相似。例如,在 Go 中你需要实现 Codec and prepare the descriptors necessary for Invoke, NewClientStream, and RegisterService. In Java you would need to implement Marshaller and prepare the descriptors necessary for newCall and addService。如果您遇到问题,可以考虑查看 gRPC 与 Protobuf 一起使用时生成的代码。

自从第一次提出这个问题以来,在 a) 使 GRPC codegen 独立于 protobuf 方面取得了进展(参见 https://github.com/grpc/grpc/pull/6130) and then to integrate that codegenerator in the flatbuffers compiler flatc: https://github.com/google/flatbuffers/commit/48f37f9e0a04f2b60046dda7fef20a8b0ebc1a70

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

2017-08-17 gRPC 在他们的博客 https://grpc.io/blog/grpc-flatbuffers/#use-flatbuffers-as-an-idl

中提到了对平面缓冲区的开箱即用支持

The recent release of Flatbuffers version 1.7 introduced truly zero-copy support for gRPC out of the box.

链接文章中的示例命令

flatc --cpp --grpc example.fbs