这里我们介绍的整个微服务来说,主要是后端服务与服务之间使用protobuf进行互相调用,前端vue相关的页面其实还是使用的http与后端服务进行通信。
那么既然是服务与服务之间进行调用,那么就会涉及到以下两种情况:
1、单向通信
grpc客户端向grpc服务端发请求,grpc服务端立马返回结果
2、流式通信
1、类似现在的人工智能gpt的模式,客户端向服务端发起请求,建立一个流连接,服务端源源不断的通过这个流向客户端返回数据 2、客户端源源不断的通过流向服务端发送数据,客户端写入完成之后,服务端一次性读取写入的信息。 3、客户端和服务端均使用流向对方写入数据
所以基于这些情况,我们在实际使用的时候需要区分开到底使用哪种模式比较好,一般来说使用单向通信的情况会更多一点。这里为了方便后续使用过程中直接照抄,所以这里我们还是使用相关的案例来进行演示。
一、单向通信
单向通信非常简单,在.proto文件的方法中没有明确的关键字标识,示例如下
rpc SayHello(HelloRequest) returns (HelloResponse){ }
适用场景有:
1、简单的数据查询,例如查询用户信息,查询订单等。 2、无需复杂的交互任务场景。
二、服务端单向流式通信
服务端流式通信的话,主要是response,所以直接在response上打stream关键字,示例如下:
rpc SayHello(HelloRequest) returns (stream HelloResponse){ }
适用场景有:
1、简分页获取数据。 2、数据实时推送,例如股票 3、大文件下载(流式返回块)
三、客户端单向流式通信
客户端流式通信的话,主要是request,所以直接在request上打stream关键字,示例如下:
rpc SayHello(stream HelloRequest) returns (HelloResponse){ }
适用场景有:
1、批量上传数据。 2、物联网数据采集
四、客户端和服务端双向流式通信
双向流式通信的话,主要是request和response,所以直接在request和response上打stream关键字,示例如下:
rpc SayHello(stream HelloRequest) returns (stream HelloResponse){ }
适用场景有:
1、IM聊天系统。 2、游戏场景
以上4种方式的主要的区别就是在request还是respnse上添加stream关键字即可。在实际的业务中,具体用哪种模式由自己根据实际的场景来决定。
还没有评论,来说两句吧...