简介
在 gRPC 中,RPC 调用模式有四种,每种模式适用于不同的业务场景。下面将详细分析这四种模式及其对应的应用场景。
参考官方文档概念:https://grpc.io/docs/what-is-grpc/core-concepts
1. 简单 RPC (Unary RPC)
模式描述
客户端发送一个请求,服务端返回一个响应。双方的通信都是一次性的。
类似于传统的 HTTP 请求-响应模型。
应用场景
- 查询服务:客户端请求一些数据,服务端根据请求参数返回一个结果。比如获取用户信息、查询订单状态等。
- 简单的计算服务:客户端传入参数,服务端执行计算后返回结果,比如加法、减法、获取某个 ID 的计算结果等。
- 无需复杂交互的任务:单次请求即能获得结果的场景,如调用支付接口、获取天气数据等。
示例
rpc GetUserInfo(UserRequest) returns (UserResponse);
2. 服务端流式 RPC (Server Streaming RPC)
模式描述
客户端发送一个请求,服务端返回一个响应流。客户端接收服务端的多个响应数据,直到服务端发送完所有数据。
应用场景
-
分页或批量获取数据:客户端需要从服务端获取大量数据时,通过流的方式接收数据,不需要一次性加载完所有数据,比如数据导出或查询日志。
-
实时数据推送:适合服务端需要不断推送数据给客户端的场景,比如股票行情、实时天气更新、监控数据等。
-
文件下载:客户端请求文件,服务端以数据块形式流式返回文件内容。
示例
rpc GetLogStream(LogRequest) returns (stream LogEntry);
3. 客户端流式 RPC (Client Streaming RPC)
模式描述
客户端发送一个流请求,服务端接收所有请求后返回一个响应。客户端可以分批次将数据流发送到服务端。
应用场景
-
批量数据上传: 客户端分批次发送数据到服务端,如文件分块上传、日志批量上传等。
-
传感器数据采集: 客户端持续收集传感器的数据,并将其流式发送至服务端进行处理。
-
数据聚合: 客户端发送多个值,服务端处理后返回汇总结果,如计算平均值、订单总金额等。
示例
rpc UploadLogStream(stream LogEntry) returns (UploadStatus);
4. 双向流式 RPC (Bidirectional Streaming RPC)
模式描述
客户端和服务端都可以通过流的方式不断发送和接收消息。双方可以并发地发送和接收消息,且不需要等待对方完成发送。
应用场景
-
实时聊天系统: 客户端和服务端不断发送和接收消息,适合聊天或实时通信的场景,比如多人游戏中的玩家交流。
-
实时数据交换: 适用于实时监控、视频流等双向数据通信场景。
-
协同编辑: 客户端和服务端之间协同编辑,双方可以不断传输状态或修改数据。
示例
rpc Chat(stream ChatMessage) returns (stream ChatMessage);
应用场景总结
-
简单 RPC (Unary RPC): 适合简单的请求和响应,通常用于查询、计算等任务。
-
服务端流式 RPC (Server Streaming RPC): 适合分页获取、大量数据传输等场景。
-
客户端流式 RPC (Client Streaming RPC): 适合批量上传、传感器数据采集等场景。
-
双向流式 RPC (Bidirectional Streaming RPC): 适合实时双向通信、聊天系统、实时数据交换等场景。