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