gRPC基于C++实现服务端推送通知的适配通信模式选型咨询
gRPC服务端主动推送场景通信模式选型结论
最适合选用服务端流式RPC(Server Streaming RPC)。
选型依据
gRPC的4种通信模式中,只有流模式支持长连接下的单向/双向连续数据传输,针对纯服务端主动推送通知的需求,服务端流式RPC是最优解:
- 客户端仅需发起1次订阅请求,即可和服务端建立长连数据流,无需后续重复请求
- 服务端可在任意时机,通过该数据流主动向客户端推送任意数量的通知消息,直到服务端主动关闭流或连接中断
- C++ gRPC SDK对服务端流式RPC提供了完善的同步、异步实现API,底层已经封装了长连接保活、消息序列化/反序列化、流控等逻辑,业务层实现成本极低
如果你的场景还需要客户端同时向服务端发送上行消息,可选择双向流式RPC(Bidirectional Streaming RPC),纯单向推送场景下优先选择服务端流式RPC即可。
C++实现核心proto示例
服务端推送的场景首先需要在proto文件中定义服务端流式的RPC方法,示例如下:
syntax = "proto3"; package notification; service NotifyService { // 服务端流式RPC:客户端提交订阅请求,服务端持续推送通知 rpc Subscribe(SubscribeReq) returns (stream NotifyMsg) {} } message SubscribeReq { string client_id = 1; // 可扩展订阅的通知类型、过滤规则等自定义参数 } message NotifyMsg { int32 msg_type = 1; string content = 2; int64 timestamp = 3; }
内容的提问来源于stack exchange,提问作者JJ Lim
相关产品推荐
相关产品推荐

