欢迎光临散文网 会员登陆 & 注册

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

2021-04-14 00:32 作者:roseduanV  | 我要投稿

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 模式

双向流 RPC 模式其实就是客户端和服务端流 RPC 的组合,客户端以消息流的方式发送数据,服务端也已消息流的方式响应数据。

在订单服务中,我们可能需要处理订单,客户端发送连续的订单信息,服务端对订单进行发货处理。首先我们在 proto 文件中定义一个新的方法:

然后在 server/main.go 中实现该方法的逻辑:

这里的处理逻辑比起前面的几个稍微复杂了一点,需要多看下,自己动手敲一下。

然后就是客户端的逻辑:

这就是 gRPC 的四种通信模式的 demo 演示,觉得对你有帮助的话,记得点个赞👍哦!

demo 的完整代码在我的 GitHub 上面:github.com/roseduan/grp


最简单的 gRPC 教程—2 通信模式的评论 (共 条)

分享到微博请遵守国家法律