gRPC众0到1系列【7】
文章目录
- 一、gRPC四种通信方式
- 1.1 gRPC通信方式概览
- 1.2 一元RPC(Unary RPC)
- 1.3 服务端流式 RPC(Server Streaming)
- 1.4 客户端流式 RPC(Client Streaming)
- 1.5 双向流式 RPC(Bidirectional Streaming)
- 1.6 总结对比
一、gRPC四种通信方式
1.1 gRPC通信方式概览
1.2 一元RPC(Unary RPC)
📌 原理
- 最简单的模式:客户端发送一个请求,服务端返回一个响应。
- 类似传统 REST API,但使用 protobuf + HTTP/2。
- 底层:一个 HTTP/2 请求/响应对。
🧩 使用场景
- 用户登录、查询用户信息、下单等“请求-响应”操作。
1.3 服务端流式 RPC(Server Streaming)
📌 原理
- 客户端发送一个请求,服务端返回多个响应(流)。
- 服务端通过
StreamObserver.onNext()
多次发送,最后调用onCompleted()
。 - 底层:一个请求,多个 DATA 帧(同一 HTTP/2 流)。
🧩 使用场景
- 实时股票行情推送、日志订阅、传感器数据广播。
1.4 客户端流式 RPC(Client Streaming)
📌 原理
- 客户端发送多个请求,服务端返回一个响应。
- 客户端通过
StreamObserver
发送多个onNext()
,最后onCompleted()
。 - 服务端在
onCompleted()
回调中汇总结果并响应。
🧩 使用场景
- 文件分片上传、批量数据提交、实时语音识别(客户端持续发送音频片段)。
1.5 双向流式 RPC(Bidirectional Streaming)
📌 原理
- 客户端和服务端均可随时发送多个消息,全双工通信。
- 双方各自持有
StreamObserver
,可独立调用onNext()
。 - 底层:HTTP/2 的双向流,天然支持。
🧩 使用场景
- 聊天室、实时协作编辑、IoT 设备双向通信。
1.6 总结对比
通信类型 | 客户端请求 | 服务端响应 | Java Stub 类型 | 典型场景 |
---|---|---|---|---|
Unary | 1 次 | 1 次 | BlockingStub | 登录、查询 |
Server Streaming | 1 次 | N 次 | BlockingStub(返回 Iterator) | 实时推送 |
Client Streaming | N 次 | 1 次 | AsyncStub(回调) | 批量上传 |
Bidirectional Streaming | N 次 | N 次 | AsyncStub(双向回调) | 聊天、协作 |