当前位置: 首页 > news >正文

专业做公司网站/产品推广网站哪个好

专业做公司网站,产品推广网站哪个好,幼儿园教育类网站模板下载,深圳建网站服务商上次简单介绍了grpc的使用方法,并创建了一个方法调用,在grpc中有四种服务类型,下面分别进行介绍 简单rpc 这就是一般的rpc调用,一个请求对象对应一个返回对象 proto语法: rpc simpleHello(Person) returns (Result) {}…

上次简单介绍了grpc的使用方法,并创建了一个方法调用,在grpc中有四种服务类型,下面分别进行介绍

简单rpc

这就是一般的rpc调用,一个请求对象对应一个返回对象

proto语法:
rpc simpleHello(Person) returns (Result) {}service代码
@Override
public void simpleHello(ProtoObj.Person request,io.grpc.stub.StreamObserver<ProtoObj.Result> responseObserver) {//返回结果responseObserver.onNext(ProtoObj.Result.newBuilder().setString("hello, "+request.getMyName()).build());responseObserver.onCompleted();
}client代码
@Test
public void  simple() throws InterruptedException {final ManagedChannel channel = ManagedChannelBuilder.forAddress("127.0.0.1", 8080).usePlaintext(true).build();//定义同步阻塞的stubHelloServiceGrpc.HelloServiceBlockingStub blockingStub = HelloServiceGrpc.newBlockingStub(channel);ProtoObj.Person person = ProtoObj.Person.newBuilder().setMyName("World").build();//simpleSystem.out.println("---simple rpc---");System.out.println(blockingStub.simpleHello(person).getString());channel.shutdown();
}输出
---simple rpc---
hello, World

服务端流式rpc

一个请求对象,服务端可以传回多个结果对象

proto语法
rpc serverStreamHello(Person) returns (stream Result) {}service代码
@Override
public void serverStreamHello(ProtoObj.Person request,io.grpc.stub.StreamObserver<ProtoObj.Result> responseObserver) {//返回多个结果responseObserver.onNext(ProtoObj.Result.newBuilder().setString("hello, "+request.getMyName()).build());responseObserver.onNext(ProtoObj.Result.newBuilder().setString("hello2, "+request.getMyName()).build());responseObserver.onNext(ProtoObj.Result.newBuilder().setString("hello3, "+request.getMyName()).build());responseObserver.onCompleted();
}client代码
@Test
public void serverStream(){final ManagedChannel channel = ManagedChannelBuilder.forAddress("127.0.0.1", 8080).usePlaintext(true).build();//定义同步阻塞的stubHelloServiceGrpc.HelloServiceBlockingStub blockingStub = HelloServiceGrpc.newBlockingStub(channel);ProtoObj.Person person = ProtoObj.Person.newBuilder().setMyName("World").build();//server sideSystem.out.println("---server stream rpc---");//返回结果是IteratorIterator<ProtoObj.Result> it = blockingStub.serverStreamHello(person);while (it.hasNext()) {System.out.print(it.next());}channel.shutdown();
}输出
---server stream rpc---
string: "hello, World"
string: "hello2, World"
string: "hello3, World"

客户端流式rpc

客户端传入多个请求对象,服务端返回一个响应结果

proto语法
rpc clientStreamHello(stream Person) returns (Result) {}service代码
@Override
public io.grpc.stub.StreamObserver<ProtoObj.Person> clientStreamHello(final io.grpc.stub.StreamObserver<ProtoObj.Result> responseObserver) {//返回observer应对多个请求对象return new StreamObserver<ProtoObj.Person>(){private ProtoObj.Result.Builder builder=ProtoObj.Result.newBuilder();@Overridepublic void onNext(ProtoObj.Person value) {builder.setString(builder.getString() +"," + value.getMyName());}@Overridepublic void onError(Throwable t) {}@Overridepublic void onCompleted() {builder.setString("hello"+builder.getString());responseObserver.onNext(builder.build());responseObserver.onCompleted();}};
}client代码
@Test
public void clientStream() throws InterruptedException {final ManagedChannel channel = ManagedChannelBuilder.forAddress("127.0.0.1", 8080).usePlaintext(true).build();//定义异步的stubHelloServiceGrpc.HelloServiceStub asyncStub = HelloServiceGrpc.newStub(channel);ProtoObj.Person person = ProtoObj.Person.newBuilder().setMyName("World").build();//client sideSystem.out.println("---client stream rpc---");StreamObserver<ProtoObj.Result> responseObserver = new StreamObserver<ProtoObj.Result>() {@Overridepublic void onNext(ProtoObj.Result result) {System.out.println("client stream--" + result.getString());}@Overridepublic void onError(Throwable t) {}@Overridepublic void onCompleted() {//关闭channelchannel.shutdown();}};StreamObserver<ProtoObj.Person> clientStreamObserver = asyncStub.clientStreamHello(responseObserver);clientStreamObserver.onNext(ProtoObj.Person.newBuilder().setMyName("World").build());clientStreamObserver.onNext(ProtoObj.Person.newBuilder().setMyName("World2").build());clientStreamObserver.onCompleted();//由于是异步获得结果,所以sleep一秒Thread.sleep(1000);
}输出
---client stream rpc---
client stream--hello,World,World2

双向流式rpc

结合客户端流式rpc和服务端流式rpc,可以传入多个对象,返回多个响应对象

proto语法
rpc biStreamHello(stream Person) returns (stream Result) {}service代码
@Override
public io.grpc.stub.StreamObserver<ProtoObj.Person> biStreamHello(final io.grpc.stub.StreamObserver<ProtoObj.Result> responseObserver) {//返回observer应对多个请求对象return new StreamObserver<ProtoObj.Person>(){private ProtoObj.Result.Builder builder=ProtoObj.Result.newBuilder();@Overridepublic void onNext(ProtoObj.Person value) {responseObserver.onNext(ProtoObj.Result.newBuilder().setString("hello2, "+value.getMyName()).build());responseObserver.onNext(ProtoObj.Result.newBuilder().setString("hello3, "+value.getMyName()).build());}@Overridepublic void onError(Throwable t) {}@Overridepublic void onCompleted() {responseObserver.onCompleted();}};
}client代码
@Test
public void bidirectStream() throws InterruptedException {final ManagedChannel channel = ManagedChannelBuilder.forAddress("127.0.0.1", 8080).usePlaintext(true).build();//定义异步的stubHelloServiceGrpc.HelloServiceStub asyncStub = HelloServiceGrpc.newStub(channel);ProtoObj.Person person = ProtoObj.Person.newBuilder().setMyName("World").build();//bi streamSystem.out.println("---bidirectional stream rpc---");StreamObserver<ProtoObj.Result>  responseObserver = new StreamObserver<ProtoObj.Result>() {@Overridepublic void onNext(ProtoObj.Result result) {System.out.println("bidirectional stream--"+result.getString());}@Overridepublic void onError(Throwable t) {}@Overridepublic void onCompleted() {channel.shutdown();}};StreamObserver<ProtoObj.Person> biStreamObserver=asyncStub.biStreamHello(responseObserver);biStreamObserver.onNext(ProtoObj.Person.newBuilder().setMyName("World").build());biStreamObserver.onNext(ProtoObj.Person.newBuilder().setMyName("World2").build());biStreamObserver.onCompleted();//由于是异步获得结果,所以sleep一秒Thread.sleep(1000);}输出
---bidirectional stream rpc---
bidirectional stream--hello2, World
bidirectional stream--hello3, World
bidirectional stream--hello2, World2
bidirectional stream--hello3, World2    

总结

grpc通过使用流式的方式,返回/接受多个实例可以用于类似不定长数组的入参和出参

转载于:https://www.cnblogs.com/resentment/p/6792029.html

http://www.jmfq.cn/news/4927681.html

相关文章:

  • 做it看日常看哪些网站/泉州百度首页优化
  • 有没有网站学做总结/手机百度网盘登录入口
  • 9k9k网页游戏开服表/淘宝关键词优化
  • 外围网站怎么做/网店交易平台
  • 网页网站怎么做的吗/国外搜索引擎网址
  • 创建网站目录结构应遵循的方法/优化营商环境心得体会2023
  • 什么是网络建站/品牌推广的三个阶段
  • 免费微商城平台/seo怎么优化关键词排名
  • 做网站报价/站长之家是什么网站
  • wordpress前台登录框/百度seo关键词排名查询工具
  • 网站建设与管理软件/铜陵seo
  • dw网站模板/百度服务商
  • 四川电脑网站建设/优化服务公司
  • 自己做网站用软件/网络营销的步骤
  • 购物型网站模板/经典广告
  • 郑州市汉狮做网站/百度推广电话
  • 手机微网站怎么做/搜索引擎优化文献
  • 找公司做网站怎么图片都要自己找/新手怎么学电商运营
  • 网站建设成本核算/如何给公司网站做推广
  • 注册公司如何网上核名/长沙网站搭建优化
  • 怎么在自己的电脑上做网站/网络销售平台排名
  • 网站备案审查/fifa最新世界排名
  • 图片设计公司/怎样淘宝seo排名优化
  • 企业做网站天津/优化设计英语
  • 怎么做福彩网站/网站优化是做什么的
  • 泛微e8做网站门户/桔子seo工具
  • 昆山普立斯特做的有网站/收录
  • 湖北黄冈疫情最新消息/seo 推广怎么做
  • 烟台制作网站的公司简介/网络营销推广方式包括
  • 微商网站模板/网络销售推广公司