1 rpc流
- 客户端调用
- sub构建消息
- http2网络连接
- 将消息传递给服务端骨架
2 pb编码消息
pb的编码方式:标签+值,标签+值 (字段索引决定位置)
标签:字段索引+线路类型
值编码:不同的类型采用不同的编码
- int32使用varint编码 (intx)
- 字符串使用utf8编码
- 有符号整数 zigzag转为正数,再varint
- 非varint类型,固定字节float fixed64
- 基于长度分隔
3 基于长度前缀的消息分帧
大端格式
压缩标+消息长度+数据内容
grpc支3种传输方式
- http2
- Cronet
- 进程内的in-process
4 基于http2 的grpc
http2的客户端和服务端的链接都通过一个tcp连接完成
重要术语
- 流 (stream建立好的连接上的双向字节流)
- 帧(frame, 最小单元。帧头,帧尾)
- 消息(完整的帧序列:一个或多个帧祖册)
消息格式
- 数据- 头信息-数据
请求消息
- 请求头信息,长度为前缀的消息, EOS标记
响应消息
- 响应投信息--长度为前缀的消息,trailer(携带状态码和请求的状态消息)
理解通信模式
- 一元模式,消息最后添加EOS标记
- 服务的流模式
- 服务端发送多条消息
- 客户端流模式
- 客户端发送多条消息
- 双写流模式
- 都发送多条消息
5 grpc实现架构
核心层
- 代码生成的api
- grpc核心层
- http/2
- ssl