实际上,gRPC和Protobuf是两个完全不同的东西。让我简化:
- gRPC管理客户端和服务器可以交互的方式(就像带有REST API的Web客户端/服务器)
- protobuf只是一个序列化/反序列化工具(就像JSON一样)
gRPC有两个方面:服务器端和客户端,可以拨打服务器。服务器公开RPC(即可以远程调用的函数)。你有很多选择:你可以保护通信(使用TLS),添加认证层(使用拦截器),......
您可以在任何程序中使用protobuf,无需客户端/服务器。如果你需要交换数据,并希望它们是强类型的,protobuf是一个不错的选择(快速和可靠)。
话虽如此,您可以将两者结合起来构建一个不错的客户端/服务器系统:gRPC将是您的客户端/服务器代码,并且是您的数据协议的原型。
PS:我写了这个paper来说明如何使用Go逐步构建带有gRPC和protobuf的客户端/服务器。
协议缓冲区是(是?)接口定义语言和序列化库:
- 您可以在其IDL中定义数据结构,即描述您要使用的数据对象
- 它提供了将数据对象与二进制文件进行转换的例程,例如:用于从磁盘写入/读取数据
gRPC 使用相同的IDL,但添加了语法“rpc”,它允许您使用Protobuf数据结构作为数据类型定义远程过程调用方法签名:
- 您定义数据结构
- 您添加了rpc方法定义
- 它提供了通过网络提供和调用方法签名的代码
- 如果需要
,您仍然可以使用Protobuf手动序列化数据对象
回答问题:
- gRPC在第5,6和7层工作.Protobuf在第6层工作。
- 当您说“邮件传输”时,Protobuf不关心传输本身。它只适用于任何数据传输的任何一端,将字节转换为对象
- 默认情况下使用gRPC表示您使用的是Protobuf 。您可以编写自己的客户端,使用Protobuf但不是gRPC与gRPC互操作,或者将其他序列化程序插入gRPC - 但使用gRPC会更容易
- 真
- 是的,你可以
醇>
grpc 是由Google构建的框架,用于google本身的生产项目中,而#HyperledgerFabric是由grpc构建的,有许多由grpc构建的开源应用程序
protobuff 是类似于 json 的数据表示形式,它也是由Google提供的,实际上他们在其生产项目中生成了数千个原型文件
grpc
- gRPC是Google开发的开源框架
- 它允许我们为RPC创建请求和响应并通过框架处理其余部分
- REST面向CRUD,但grpc面向API(无限制)
- 基于HTTP / 2构建
- 提供>>>>>身份验证,负载平衡,监视,日志记录
- [HTTP / 2]
- HTTP1.1早在1997年就发布了
- HTTP1在每次请求时打开与服务器的新TCP连接
- 它不压缩标题
- 没有服务器推送,仅适用于Req,Res
- 2015年发布的HTTP2(SPDY)
- 支持多路复用
- 客户端和服务器可以通过同一TCP连接并行推送消息
- 大大减少了延迟
- HTTP2支持标头压缩
- HTTP2是二进制的
- proto buff是二进制的,因此非常适合HTTP2
- [TYPES]
- 一元
- 客户端流
- 服务器流
- 双向流
- grpc服务器默认为异步
- grpc客户端可以同步或异步
probbuff
- 协议缓冲区与语言无关
- 解析协议缓冲区(二进制格式)占用的CPU较少
- [命名]
- 使用驼峰大小写作为邮件名称
- 在字段中使用underscore_seperated
- 将驼峰式用于枚举,并将CAPITAL_WITH_UNDERSCORE用于值名称
- [评论]
- [优势]
- 数据已完全输入
- 数据已完全压缩(CPU使用率更低)
- 需要架构(消息)来生成代码和读取代码
- 文档可以嵌入架构中
- 可以用任何一种语言读取数据
- 架构可以随时以安全的方式发展
- 比XML快
- 代码会自动为您生成
- Google发明了原型爱好者,他们使用48000条protobuf消息和12000.proto文件
- 包括RPC在内的许多RPC框架都使用协议缓冲区来交换数据