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");

    }

响应结果

 

posted @ 2019-04-22 20:22  javaeelwh  阅读(239)  评论(0)    收藏  举报