gRPC--JAVA(服务端流)
.proto
rpc methodResultStream(HelloRequest) returns (stream HelloReply) {}
服务端:
@Override public void methodResultStream(Helloworld.HelloRequest request, StreamObserver<Helloworld.HelloReply> responseObserver){ System.out.println("收到了请求\n"); Helloworld.HelloReply result = Helloworld.HelloReply.newBuilder().setMessage("hello world").build(); responseObserver.onNext(result); responseObserver.onNext(result); try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } responseObserver.onNext(result); responseObserver.onCompleted(); }
客户端
/** * 服务端流 */ @Test public void contextLoad3(){ Helloworld.HelloRequest request = Helloworld.HelloRequest.newBuilder().setName("hello alice").build(); Channel channel = ManagedChannelBuilder .forAddress("127.0.0.1", 9098)//服务端 .usePlaintext(true)//usePlaintext的意思是使用明文不加密(应该可以加密) .build(); //返回流请求是同步的,所以需要调用同步的方法 返回了一个迭代器 迭代器中有服务端返回的所有结果 //由于是同步调用,在forEach中会等待服务端的每一个返回结果 GreeterGrpc.GreeterBlockingStub blockingStub = GreeterGrpc.newBlockingStub(channel); Iterator<Helloworld.HelloReply> result = blockingStub.methodResultStream(request); result.forEachRemaining(o->{ System.out.println("返回了结果\n"); }); System.out.println("结束\n"); }
响应结果


浙公网安备 33010602011771号