写点什么

A tour of gRPC:05 - gRPC server straming 服务端流

作者:BUG侦探
  • 2022 年 7 月 28 日
  • 本文字数:835 字

    阅读完需:约 3 分钟

A tour of gRPC:05 - gRPC server straming 服务端流

在上一篇中,我们实现了 gRPC 中的 unary call,即客户端发一个请求,服务端回复一个响应。并尝试了 它在跨语言的情型下调用。在本篇中,我们将尝试实现 server straming 即客户端发送一个请求,服务 端回复多个响应,并同样尝试跨语言的调用。

go server straming call

1. 添加 filter_message.proto 用于描述筛选条件。



​2. 修改 laptop_service.proto 添加 一个搜索的 service。



​3. 运行 make clean 和 make gen 生成代码

4. 在 laptop_store.go 在 LaptopStore 接口中添加 Search 函数,并添加相应实现。(因为深拷⻉多次使用,这里抽出一个函数)



​5. 在 laptop_server.go 中添加 SearchLaptop 方法



​6. 将 client 包下的 main.go 中的 createLaptop 逻辑抽出来,并在 main 函数中利用 for 创建 10 个; 添加一个过滤条件



​7. make server 运行服务器 make client 运行客户端,查看结果,运行正常




​可以观察到,在创建了 10 个 Laptop,接收了筛选条件后,server 会检查逐条检查 map 中的数据,如果 符合,则返回一条,即结果分多次逐条返回。

Java server straming call

1. 将 gRpc go Straming 中编写的 filter_message.proto 和 laptop_service.protp 文件拷⻉ 至 Java 项目的 proto 文件夹中,并运行 mvn clean 和 mvn comple

2. 在 LaptopStore 接口中新增 search 方法



3. 新增一个接口 LaptopStream 其只有一个 send 方法



​4. 在 InMemoryLaptopStore 中实现上面新增的 search 方法



​5. 在 LaptopService 编写一个 searchLaptop 方法作作为服务端的实现。



​6. 接下来实现 LaptopClient 中实现客户端逻辑,增加一个 SearchLaptop 方法。



​7. 修改 LaptopClient 中的 main 方法,先创建 10 个 Laptop 再进行过滤查询



​运行 server 再运行 client




​可以观察到,server 的结果是多次返回的,这也是 server straming 的特性。

跨语言的 server straming call 测试

我们先运行 Java 的 server 再运行 golang 的 client。



​再反过来,运行 golang 的 server 和 Java 的 client。



​运行的结果符合预期,并且符合 server straming 的特性。







发布于: 14 小时前阅读数: 6
用户头像

BUG侦探

关注

还未添加个人签名 2021.06.08 加入

专注于发掘程序员/工程师的有趣灵魂,对工作中的思路与总结进行闪光播报。

评论

发布
暂无评论
A tour of gRPC:05 - gRPC server straming 服务端流_gRPC_BUG侦探_InfoQ写作社区