最简单的 gRPC 教程—2 通信模式

gRPC 包含四种基础的通信模式:
一元模式(Unary RPC)
服务器端流 RPC(Server Sreaming RPC)
客户端流 RPC(Client Streaming RPC)
双向流 RPC(Bidirectional Streaming RPC)
一元模式
一元模式是最简单、也最容易理解的通信方式,客户端发送单一的请求,并从服务端获取到响应。上一篇文章中的获取和添加商品的逻辑,其实就是很典型的一元 RPC 模式。
在这里,我们构建一个简单的订单服务,可以添加、获取、搜索、处理订单,借此来演示 gRPC 的几种通信模式。

首先定义一个 proto 文件(我命名为 OrderInfo.proto):
然后使用命令 protoc --go_out=plugins=grpc:../order OrderInfo.proto
生成所需要的客户端存根文件(参考前一篇文章)。
然后新建一个 server/main.go 文件,写一下两个业务方法的逻辑:
然后继续在 main.go 中添加一个服务器:
接下来继续写客户端的逻辑,调用服务端的两个方法,获取到响应。和上一篇文章类似,新建一个 client/main.go 文件:
服务端流 RPC 模式
一元模式只有单一的请求和响应,但是服务器端流 RPC 模式下,服务器在收到客户端的请求后,可能会发送多个响应的序列,这被称为“流”。
在订单服务中,如果客户端根据关键字搜索订单,那么服务器会把所有满足条件的记录返回给客户端,通过这个例子来演示一下这种模式:

首先在 proto 文件中新增一个 rpc 方法:
注意这里的返回值加上 stream
表示返回的是订单流,然后再使用 protoc
命令重新生成 OrderInfo.pb.go 文件。
然后在 server/main.go 文件中添加搜索订单的逻辑:
客户端的写法也和之前的有一些区别了:
客户端流 RPC 模式
在这种模式下,客户端会发送多个请求给服务端,服务端会发送一条响应到客户端。在订单服务中,我们会更新一批订单,客户端则通过流的的方式传输过来。
还是在 proto 文件中定义一个新的方法:
注意这里在 rpc 的方法入参中多了 stream
关键字,表示是客户端流,然后再使用 protoc
生成文件。
还是老样子,在 server/main.go 中添加更新订单的逻辑:
然后继续在客户端 client/main.go 中添加:
双向流 RPC 模式
在订单服务中,我们可能需要处理订单,客户端发送连续的订单信息,服务端对订单进行发货处理。首先我们在 proto 文件中定义一个新的方法:
然后在 server/main.go 中实现该方法的逻辑:
这里的处理逻辑比起前面的几个稍微复杂了一点,需要多看下,自己动手敲一下。
然后就是客户端的逻辑:
这就是 gRPC 的四种通信模式的 demo 演示,觉得对你有帮助的话,记得点个赞👍哦!