文章目录

  • grpc四种通信模式及其应用场景选型
  • 1、Simple RPC
  • 2、 Server-side streaming RPC
  • 3、Client-side streaming RPC
  • 4、 Bidirectional streaming RPC
  • 总结
  • grpc应用场景


grpc四种通信模式及其应用场景选型

gRPC有四种通信方式,分别是:简单 RPC(Unary RPC)、服务端流式 RPC (Server streaming RPC)、客户端流式 RPC (Client streaming RPC)、双向流式 RPC(Bi-directional streaming RPC)。它们主要有以下特点:

服务类型

特点

简单 RPC

一般的rpc调用,传入一个请求对象,返回一个返回对象

服务端流式 RPC

传入一个请求对象,服务端可以返回多个结果对象

客户端流式 RPC

客户端传入多个请求对象,服务端返回一个结果对象

双向流式 RPC

结合客户端流式RPC和服务端流式RPC,可以传入多个请求对象,返回多个结果对象

1、Simple RPC

proto语法 :
简单rpc 这就是一般的rpc调用,一个请求对象对应一个返回对象
proto语法:

rpc simpleHello(Person) returns (Result) {}

客户端发起一次请求,服务端响应一个数据,即标准RPC通信。
这种模式,一个每一次都是发起一个独立的tcp连接,走一次三次握手和四次挥手!

2、 Server-side streaming RPC

服务端流式rpc 一个请求对象,服务端可以传回多个结果对象
proto语法 :

rpc serverStreamHello(Person) returns (stream Result) {}

服务端流 RPC 下,客户端发出一个请求,但不会立即得到一个响应,而是在服务端与客户端之间建立一个单向的流,服务端可以随时向流中写入多个响应消息,最后主动关闭流,而客户端需要监听这个流,不断获取响应直到流关闭

应用场景举例:
典型的例子是客户端向服务端发送一个股票代码,服务端就把该股票的实时数据源源不断的返回给客户端。

3、Client-side streaming RPC

客户端流式rpc 客户端传入多个请求对象,服务端返回一个响应结果
proto语法 :

rpc clientStreamHello(stream Person) returns (Result) {}

应用场景:
物联网终端向服务器报送数据。

4、 Bidirectional streaming RPC

双向流式rpc 结合客户端流式rpc和服务端流式rpc,可以传入多个对象,返回多个响应对象
proto语法 :

rpc biStreamHello(stream Person) returns (stream Result) {}

应用场景:聊天应用。

总结

流式 RPC 定义与 简单 RPC 的区别只是在请求或返回参数前增加了 stream 关键词,如下:

service HelloService {
  // 客户端流式 RPC
  rpc SayHello1 (stream  HelloRequest) returns (HelloResponse);
  // 服务端流式 RPC
  rpc SayHello2 (HelloRequest) returns (stream HelloResponse);
  // 双向流式 RPC
  rpc SayHello3 (stream  HelloRequest) returns (stream HelloResponse);}

grpc应用场景

  • gRPC设计为低延迟和高吞吐量通信。gRPC非常适用于效率至关重要的轻型微服务。点对点实时通信 - gRPC对双向流媒体提供出色的支持。gRPC服务可以实时推送消息而无需轮询。多语言混合开发环境 - gRPC工具支持所有流行的开发语言,使gRPC成为多语言开发环境的理想选择。
  • 网络受限环境 - 使用Protobuf(一种轻量级消息格式)序列化gRPC消息。gRPC消息始终小于等效的JSON消息。

至于选择那种模式,完全看业务情况吧!