聊一聊 gRPC 的四种通信模型
发布时间:2023-02-28 09:15:47 所属栏目:通讯 来源:
导读: 前文松哥为大家聊过通用资源计划的基本用法,今天我们来稍微深入些,来看看通用资源计划中四种不同的通讯方式。
接下来松哥就通过四个完整的案例,来分别和向伙伴们演示这四种不同的通信模式。
1. 准
接下来松哥就通过四个完整的案例,来分别和向伙伴们演示这四种不同的通信模式。
1. 准
前文松哥为大家聊过通用资源计划的基本用法,今天我们来稍微深入些,来看看通用资源计划中四种不同的通讯方式。 接下来松哥就通过四个完整的案例,来分别和向伙伴们演示这四种不同的通信模式。 1. 准备工作 关于 gRPC 的基础知识我们就不啰嗦了,咱们直接来看我今天的 proto 文件,如下: 这次我新建了一个名为 book.proto 的文件,这里主要定义了一些图书相关的方法,如下: 在方法参数和返回值中出现的 stream,就表示这个方法的参数或者返回值是流的形式(其实就是数据可以多次传输)。 message 中出现了一个上篇文章没有的关键字 repeated,这个表示这个字段可以重复,可以简单理解为这就是我们 Java 中的数组。 2. 一元 RPC 一元 RPC 是一种比较简单的 RPC 模式,其实说白了我们上篇文章和大家介绍的就是一种一元 RPC,也就是客户端发起一个请求,服务端给出一个响应,然后请求结束。 上面我们定义的五个方法中,addBook 和 getBook 都算是一种一元 RPC。 2.1 addBook 先来看 addBook 方法,这个方法的逻辑很简单,我们提前在服务端准备一个 Map 用来保存 Book,addBook 调用的时候,就把 book 对象存入到 Map 中,并且将 book 的 ID 返回。 2.2 getBook getBook 跟上面的 addBook 类似,先来看服务端代码,如下: 小伙伴们大概也能看出来,addBook 和 getBook 基本上操作套路是一模一样的。 3. 客户端流 RPC 客户端流则是客户端发起多个请求,服务端只给出一个响应。 上面的 updateBooks 就是一个客户端流的案例,客户端想要修改图书,可以发起多个请求修改多本书,服务端则收集多次修改的结果,将之汇总然后一次性返回给客户端。 客户端每发送一本书来,就会触发服务端的 onNext 方法,然后我们在这方法中进行图书的更新操作,并记录更新结果。最后,我们在 onCompleted 方法中,将更新结果汇总返回给客户端,基本上就是这样一个流程。 在客户端这块,updateBooks 方法会返回一个 StreamObserver对象,调用该对象的 onNext 方法就是给服务端传递数据了,可以传递多个数据,调用该对象的 onCompleted 方法就是告诉服务端数据传递结束了,此时也会触发服务端的 onCompleted 方法,服务端的 onCompleted 方法执行之后,进而触发了客户端的 onCompleted 方法。 4. 双向流 RPC 双向流其实就是 3、4 小节的合体。即客户端多次发送数据,服务端也多次响应数据。 这段代码没有实际意义,单纯为了给小伙伴们演示双向流,我的操作逻辑是客户端传递多个 ID 到服务端,然后服务端根据这些 ID 构建对应的 Book 对象,然后三个三个一组,再返回给客户端。客户端每次发送一个请求,都会触发服务端的 onNext 方法,我们在这个方法中对请求分组返回。最后如果还有剩余的请求,我们在 onCompleted() 方法中返回。 (编辑:汽车网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |