grpc框架学习
1grpc框架概念gRPC 是现代分布式系统的理想通信框架Google开源的一款RPC框架使用Protobuf定义接口。2grpc框架优点2.1性能好grpc基于http/2协议支持连接多路复用和头部压缩可显著降低延迟、减少网络带宽占用尤其适合内部微服务间的高频、低延迟通信。2.2跨语言.proto严格定义服务以及消息类型自动生成多语言代码。数据序列化二进制码流减少空间。2.3四种通信模式2.3.1一元rpc一个请求对应一个响应Protobuf类似如下这种rpc GetUser(UserRequest) returns (UserResponse);简单流程客户端: [请求] ------------服务器: [处理]服务器: [响应] ------------客户端: [接收]2.3.2服务端流式rpc一个请求服务端返回多个响应流Protobuf类似如下这种rpc ListUsers(ListRequest) returns (stream UserResponse);简单流程客户端: [请求] ------------服务器: [处理]服务器: [响应1] ------------服务器: [响应2] ------------服务器: [响应3] ------------服务器: [流结束] ------------客户端: [持续接收...]使用场景实时推送数据大数据分批传输文件下载实时监控2.3.3客户端流式rpc客户端多个请求服务器返回一个响应Protobuf类似如下这种rpc UploadFile(stream FileChunk) returns (UploadResult);简单流程客户端: [请求1] ------------客户端: [请求2] ------------客户端: [请求3] ------------客户端: [流结束] ------------服务器: [处理所有请求]服务器: [响应] ------------客户端: [接收]使用场景文件上传批量数据提交日志批量上报传感器数据收集2.3.4双向流式RPC客户端和服务端同时发送多个消息两个流独立工作Protobuf类似如下这种rpc Chat(stream ChatMessage) returns (stream ChatMessage);简单流程客户端: [消息1] ------------服务器: [消息A] ------------客户端: [消息2] ------------服务器: [消息B] ------------客户端: [消息3] ------------服务器: [消息C] ------------...两个方向完全独立可以同时读写使用场景实时聊天系统多人游戏实时数据同步3.protobuf可以存枚举和基础类型message Order {int64 order_id 1;double price 2;enum Status {PENDING 0;PAID 1;SHIPPED 2;}Status status 3;google.protobuf.Timestamp created_at 4;string returnStatus5;}4grpc框架使用流程4.1编写好protrobuf确定好使用的通信模式入参返回的数据结构编译生成对应的pb.cc文件在再此基础上开发客户端服务端代码。客户端通过stub类对象实例调用protobuf定义的通信函数发起rpc调用返回stream在进行网络同信http2.0-tcp当时有个疑问stream两个线程读写为什么不加锁双向流读写不影响同时调用两个读或者两个写可能有问题5http2.0比1.0的优势5.1 多路复用单个tcp可以处理多个请求响应解决队头阻塞的问题1.0请求-响应后关闭连接-下个请求1.1先请求先响应2.0是没有先请求先响应谁响应快谁返回。5.2 用算法压缩请求头消除重复字段冗余减少网络开销5.3 引入流二进制协议的概念替换文本协议。解析高效。5.4 服务器主动推送资源无需要客户端请求。6protobuf中6.1oneof字段表示里面的内容是互斥的之存在其一。6.2optional关键字默认也是加上的没复制的字段会有默认值通过has_xxx()判断是否是默认值false就是默认值。6.3repeated数组列表可以表示有一个或多个。