我尝试了解 protobuf 和 gRPC 以及如何使用两者。你能帮我理解以下内容吗:
- 考虑到OSI model例如 Protobuf 位于第 4 层?
- 思考消息传输的“流程”如何,gRPC 做了什么 protobuf 遗漏的事情?
- 如果发送方使用 protobuf,服务器是否可以使用 gRPC,或者 gRPC 是否添加了只有 gRPC 客户端才能提供的内容?
- 如果 gRPC 可以实现同步和异步通信,那么 Protobuf 只是用于编码,因此与状态(true 或 false)无关?
- 我可以在前端应用程序通信中使用 gRPC 而不是 REST 或 GraphQL 吗?
我已经知道 - 或者假设我知道 - :
- 用于数据交换的二进制协议(protocol)
- 由 Google 设计
- 在客户端和服务器上使用生成的“结构”(如描述)来取消/编码消息
- 使用 protobuf (v3)
- 再次来自 Google
- RPC 调用框架
- 也使用 HTTP/2
- 可以进行同步和异步通信
我再次认为对于已经使用该技术的人来说这是一个简单的问题。我仍然感谢您对我的耐心和帮助。我也非常感谢任何对网络技术的深入研究。
最佳答案
Protocol Buffer 是(是?)接口(interface)定义语言和序列化库:
- 您在 IDL 中定义数据结构,即描述您要使用的数据对象
- 它提供了将数据对象与二进制进行转换的例程,例如用于从磁盘写入/读取数据
gRPC 使用相同的 IDL,但添加了语法“rpc”,它允许您使用 Protobuf 数据结构作为数据类型来定义远程过程调用方法签名:
- 您定义数据结构
- 您添加 rpc 方法定义
- 它提供了通过网络提供和调用方法签名的代码
- 如果需要,您仍然可以使用 Protobuf 手动序列化数据对象
回答问题:
- gRPC 在第 5、6 和 7 层工作。Protobuf 在第 6 层工作。
- 当你说“消息传输”时,Protobuf 并不关心传输本身。它仅适用于任何数据传输的任一端,将字节转换为对象
- 默认情况下使用 gRPC 意味着您正在使用 Protobuf。您可以编写自己的客户端,使用 Protobuf 但不使用 gRPC 来与 gRPC 进行互操作,或者将其他序列化器插入 gRPC - 但使用 gRPC 会更容易
- 正确
- 是的,可以
关于networking - protobuf 与 gRPC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48330261/