1 rpc流
- 客戶端調(diào)用
- sub構(gòu)建消息
- http2網(wǎng)絡(luò)連接
- 將消息傳遞給服務(wù)端骨架
2 pb編碼消息
pb的編碼方式:標(biāo)簽+值,標(biāo)簽+值 (字段索引決定位置)
標(biāo)簽:字段索引+線路類型
值編碼:不同的類型采用不同的編碼
- int32使用varint編碼 (intx)
- 字符串使用utf8編碼
- 有符號整數(shù) zigzag轉(zhuǎn)為正數(shù),再varint
- 非varint類型,固定字節(jié)float fixed64
- 基于長度分隔
3 基于長度前綴的消息分幀
大端格式
壓縮標(biāo)+消息長度+數(shù)據(jù)內(nèi)容
grpc支3種傳輸方式
- http2
- Cronet
- 進程內(nèi)的in-process
4 基于http2 的grpc
http2的客戶端和服務(wù)端的鏈接都通過一個tcp連接完成
重要術(shù)語
- 流 (stream建立好的連接上的雙向字節(jié)流)
- 幀(frame, 最小單元。幀頭,幀尾)
- 消息(完整的幀序列:一個或多個幀祖冊)
消息格式
- 數(shù)據(jù)- 頭信息-數(shù)據(jù)
請求消息
- 請求頭信息,長度為前綴的消息, EOS標(biāo)記
響應(yīng)消息
- 響應(yīng)投信息--長度為前綴的消息,trailer(攜帶狀態(tài)碼和請求的狀態(tài)消息)
理解通信模式
- 一元模式,消息最后添加EOS標(biāo)記
- 服務(wù)的流模式
- 服務(wù)端發(fā)送多條消息
- 客戶端流模式
- 客戶端發(fā)送多條消息
- 雙寫流模式
- 都發(fā)送多條消息
5 grpc實現(xiàn)架構(gòu)
核心層
- 代碼生成的api
- grpc核心層
- http/2
- ssl