protobuf 是否只有在 grpc 中使用的技术?

问题描述

在 grpc 中,我们可以使用其他一些格式来代替 protobuf 吗?

解决方法

gRPC 堆栈对所使用的编组器/序列化器没有严格的依赖性。 gRPC 看到的只是一个二进制缓冲区,其中包含完全不透明的内容(它甚至没有指定内容类型标头),通过 HTTP/2 路由发送。

按照惯例,gRPC 由 .proto 模式描述,该模式定义了 gRPC 方法和有效负载消息,然后使用协议缓冲区为编组器生成绑定代码/序列化器。

但是,如果您愿意自己编写绑定代码(或使用可以编写的库),您可以使用自己的编组器/序列化器注册 gRPC 端点。如何做到这一点的确切细节会因平台/语言/库而异,但是是的:这是可能的。由于没有使用元数据(标头等)来解析编组器/序列化器,客户端和服务器都必须提前同意将用于有效负载的格式。

,

gRPC 协议与编组器/IDL 无关,但协议缓冲区是 gRPC 直接支持的唯一编组器。

我知道 FlatbuffersBond 支持 gRPC。可能还有其他人。

您可以自由支持自己喜欢的格式。这并不容易,但也不难;它主要涉及粘合代码和定义 gRPC 使用的 RPC 模式。 gRPC + JSON gRPC blog post 介绍了 grpc-java 的过程。每种语言都有点不同,必须单独支持。