简介
grpc是由goole开发,语言中立,平台中立,开源的远程过程调用框架。基于http2协议标准设计开发,默认采用Protocol Buffers数据序列化协议,支持多种开发语言。
常用rpc框架
grpc特性
-
强大的IDL grpc使用protobuf来定义服务,protobuf是由goole开发的一种数据序列化协议(类似XML\JSON\HESSIAN)。protobuf能够将数据进行序列化,并广泛应用在数据存储,通信协议等方面。
-
支持多语言 能够基于语言自动生成客户端和服务端功能库。例如:c版本grpc,java版本的grpc-java和go版本grpc-go
-
http2 基于http2标准设计,所以相对于其他rpc框架,grpc带来了更多强大功能,如双向流,头部压缩,多复用请求等。这些功能带来了好处,如节省带宽,降低TCP链接次数,节省cpu使用和延长电池寿命等。
protobuf
介绍
protocol buffers 是一种与语言、平台无关,可扩展的序列化结构化数据的方法。常用于通信协议,数据存储等等。比JSON、XML来说,更小、更快、更简单。
语法
- syntax用于声明proto3的语法,如果不声明默认使用proto2语法。
- 定义
SearchServiceRPC 服务,其包含 RPC 方法Search,入参为SearchRequest消息,出参为SearchResponse消息 - 定义
SearchRequest、SearchResponse消息,前者定义了三个字段,每一个字段包含三个属性:类型、字段名称、字段编号 - Protobuf 编译器会根据选择的语言不同,生成相应语言的 Service Interface Code 和 Stubs
数据类型
v2与v3区别
- 删除原始值字段的字段存在逻辑
- 删除 required 字段
- 删除 optional 字段,默认就是
- 删除 default 字段
- 删除扩展特性,新增 Any 类型来替代它
- 删除 unknown 字段的支持
- 新增 JSON Mapping
- 新增 Map 类型的支持
- 修复 enum 的 unknown 类型
- repeated 默认使用 packed 编码
- 引入了新的语言实现(C#,JavaScript,Ruby,Objective-C)
与XML比较
- 更简单
- 数据描述文件只需原来的1/10至1/3
- 解析速度是原来的20倍至100倍
- 减少了二义性
- 生成了更易使用的数据访问类