A tour of gRPC:06 - gRPC client straming 客户端流

发布于:2023-02-02 ⋅ 阅读:(522) ⋅ 点赞:(0)

在上一篇中,我们尝试了使用server straming 的调用形式,在创建了十个Laptop并发送了一个筛选条 件后,由server多次返回符合筛选条件的结果,并且验证了这种调用形式的跨语言调用能力。在本篇 中,我们将尝试使用client straming 即 client 发送多次内容,而server在接收完所以内容后,返回一次 响应。本次我们将利用client straming 这种调用形式实现图像传输的功能

go Client Straming call

1. 修改 laptop_sercice.proto 增加三个和上传图片相关的message 和一个 rpc 函数,运行make gen 生成代码

​2. 在service 下新建image_store.go 实现一个图像存储

 3. 在laptop_server.go 下添加imageStore 内容,并在NewLaptopServer中新增一个参数

​4. 将所有用到NewLaptopServer 和 store 的位置进行一下修改(test 和 main),运行一次单元测试

5. 实现laptop_server中的 UploadImage

​6. 重构、修改 client 包下的main 代码

​7. 在server包下的main.go代码

​8. 编写一个单元测试进行测试

​我们在项目的根目录下新建一个tmp文件夹,并存放一张命名为images.jpeg的图片。接下来,启动server和client尝试进行传输。

文件被正确且成功的传输了。观察server的log可以发现,如我们预期,图片是被分割发送的。我们可以计算一下 ,图片大小为6164,传输时分成了6个1024k和1个20k

Java Client Straming

1. 复制 go client Straming 中的laptop_service.proto 运行 mvn clean complie 对生成的代 码进行更新

2. 在 service 包下 创建一个ImageStore interface

​3. 在 service 包下 创建ImageSotre 实体类

​4. 在service 包下 创建 DiskImageStore实现上面的 ImageStore

​5. 在LaptopService 下实现uploadImage

​6. 修改 LaptopServer 中的 main 添加图片上传的内容

​7. 运行Java 的server 再运行 golang 的client 可以看到 img 文件下收到了golang客户端发来的图片

8. 修改LaptopClient 并添加Java 客户端内容

​9. 修改 LaptopService 增加一个最大上传限制

​同上,我们运行测试一下

​同样,文件被正确且成功的传输了。观察server 的 log 可以发现,如我们预期,图片是被分割发送的。计算一下 ,图片大小为 6164k ,传输时分成了 6 个 1024k 和 1个 20k

跨语言的 client straming call 测试

1. 运行 Java 的 server ,再运行 golang 的client

​2. 运行 go 的 server ,再运行 Java 的 client


 

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到