加入收藏 | 设为首页 | 会员中心 | 我要投稿 温州站长网 (https://www.0577zz.com/)- 低代码、办公协同、物联平台、操作系统、5G!
当前位置: 首页 > 综合聚焦 > 移动互联 > 通讯 > 正文

浅谈 gRPC 的四种通信模式

发布时间:2023-12-25 06:27:29 所属栏目:通讯 来源:DaWei
导读:
  今天我们再稍微深入一点点,来看下 gRPC 中四种不同的通信模式。来分别向伙伴们演示这四种不同的通信模式。

  1. 准备工作

  由于我们在这个文件中,引用了 Google 提供的

  今天我们再稍微深入一点点,来看下 gRPC 中四种不同的通信模式。来分别向伙伴们演示这四种不同的通信模式。

  1. 准备工作

  由于我们在这个文件中,引用了 Google 提供的 StringValue(google.protobuf.StringValue),所以在这个文件上面我们首先用 import 导入相关的文件,导入之后,才可以使用。

  message 中出现了一个上篇文章没有的关键字 repeated,这个表示这个字段可以重复,可以简单理解为这就是我们 Java 中的数组。

       proto文件写完之后,按照上篇文章介绍的方法进行编译生成对应的代码,这里就不赘述了。

  2. 一元 RPC

  一元 RPC 是一种比较简单的 RPC 模式,其实说白了我们上篇文章和大家介绍的就是一种一元 RPC,也就是客户端发起一个请求,服务端给出一个响应,然后请求结束。

  先来看 addBook 方法,这个方法的逻辑很简单,我们提前在服务端准备一个 Map 用来保存 Book[,当addBook 调用的时候,就把 book 对象存入到 Map 中,并且将 book 的 ID 返回。

  这里我使用了 CountDownLatch 来实现线程等待,等服务端给出响应之后,客户端再结束。所以这里在开发人员回调的 onNext 指派的方法中,我们就可以拿到客户端和服务端的返回值。

  3. 服务流 RPC

  前面的一元 RPC,客户端发起一个请求,服务端给出一个响应,请求就结束了。服务端流则是客户端发起一个请求,服务端给出一个响应序列,这个响应序列组成一个流。

    等所有操作都完成后,执行 responseObserver.onCompleted();,表示服务端的响应序列结束了,这样客户端也就知道请求结束了。

  客户端的代码好理解,搜索的关键字是 明清小说,每当服务端返回一次数据的时候,客户端回调的 onNext 方法就会被触发一次,当服务端执行了 responseObserver.onCompleted(); 之后,客户端的 onCompleted 方法也会被触发。

  这个就是服务端流,客户端发起一个请求,服务端通过 onNext 可以多次写回数据。

  4. 客户端流 RPC

  客户端流则是客户端发起多个请求,服务端只给出一个响应。

  上面的 updateBooks 就是一个客户端流的案例,客户端想要修改图书,可以发起多个请求修改多本书,服务端则收集多次修改的结果,将之汇总然后一次性返回给客户端。这样一来,不仅节省了大量的时间,而且可以避免重复操作,提高工作效率。

  客户端每发送一本书来,就会触发服务端的 onNext 方法,然后我们在这方法中进行图书的更新操作,并记录更新结果。最后,我们在 onCompleted 方法中,将更新结果汇总返回给客户端,基本上就是这样一个流程。

  在客户端这块,updateBooks 方法会返回一个 StreamObserver对象,调用该对象的 onNext 方法就是给服务端传递数据了,可以传递多个数据,调用该对象的 onCompleted 方法就是告诉服务端数据传递结束了,此时也会触发服务端的 onCompleted 方法,服务端的 onCompleted 方法执行之后,进而触发了客户端的 onCompleted 方法。
 

(编辑:温州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章