全书目录

第二十五篇:gRPC 完全指南 —— 高速专线通信宇宙

第六章:四种 RPC 车道 —— 一问一答、持续下发、持续上报、双向对讲

2 分钟 538 字 第 455 / 962 个阅读单元

gRPC 有四种典型通信形态。你可以把它们想成城市专线里的四种车道设计。


#1. Unary —— 单次往返窗口

最普通的一种:发一次请求,回一次响应。

text
税务局系统  ──请求──>  调度中心
税务局系统  <─响应──  调度中心
proto
rpc GetRoute(RouteRequest) returns (RouteReply);

适合:

  • 查详情
  • 创建记录
  • 单次计算
  • 权限校验
  • 配置获取

这类最接近“普通函数调用”。


#2. Server Streaming —— 服务器持续下发窗口

客户端发一次请求,服务端持续推一串消息回来。

text
监控大屏  ──订阅 ring-1 路况──>  调度中心
监控大屏  <── 路况1 ───────────
监控大屏  <── 路况2 ───────────
监控大屏  <── 路况3 ───────────
proto
rpc WatchRoad(RoadWatchRequest) returns (stream RoadEvent);

适合:

  • 实时通知
  • 路况、行情、日志、指标推送
  • 大结果集渐进返回
  • LLM/推理结果分段回传

关键心智:

请求只发一次,后面重点不是“再请求”,而是“持续读流”。


#3. Client Streaming —— 客户端持续上报窗口

客户端不断发消息,服务端最后汇总回一条响应。

text
各路摄像头  ──帧1──>  
各路摄像头  ──帧2──>  调度中心
各路摄像头  ──帧3──>  
各路摄像头  <─汇总结果──
proto
rpc UploadSensors(stream SensorFrame) returns (UploadSummary);

适合:

  • 批量上传
  • 日志/埋点收集
  • 分块传输大文件
  • 设备持续上报后统一确认

关键心智:

不是“发数组”,而是“边产生边送”,最后再统一结算。


#4. Bidirectional Streaming —— 双向对讲窗口

双方都可以持续发消息,彼此独立,像专线对讲机。

text
隧道控制台  <====== 双向专线 ======>  调度中心
   发指令                              发确认
   发状态                              发新策略
   发报警                              发回退命令
proto
rpc ControlTunnel(stream ControlFrame) returns (stream ControlFrame);

适合:

  • 实时协同
  • 聊天式控制流
  • 网关与中心双向通信
  • 设备控制与状态回传
  • 低延迟交互式系统

这里最容易误解的一点是:

双向流不是“先客户端流,再服务端流”,而是两边各自都有独立流,可以边收边发。