gRPC--JAVA(雙向流)


.proto

rpc methodDoubleStream(stream HelloRequest) returns (stream HelloReply) {}

服務端

 public StreamObserver<Helloworld.HelloRequest> methodDoubleStream(StreamObserver<Helloworld.HelloReply> responseObserver){
        return new StreamObserver<Helloworld.HelloRequest>() {
            @Override
            public void onNext(Helloworld.HelloRequest request) {
                System.out.println("收到了請求\n");
                Helloworld.HelloReply result = Helloworld.HelloReply.newBuilder().setMessage("hello alice").build();
                responseObserver.onNext(result);
            }

            @Override
            public void onError(Throwable throwable) {

            }

            @Override
            public void onCompleted() {
                responseObserver.onCompleted();
            }
        };
    }

 

客戶端

 

/**
     * 雙向流
     */
    @Test
    public void contextLoad4(){
        Channel channel = ManagedChannelBuilder
                .forAddress("127.0.0.1", 9098)//服務端
                .usePlaintext(true)//usePlaintext的意思是使用明文不加密(應該可以加密)
                .build();
        //異步存根
        GreeterGrpc.GreeterStub greeterStub = GreeterGrpc.newStub(channel);
        StreamObserver<Helloworld.HelloReply> responseObserver = new StreamObserver<Helloworld.HelloReply>() {
            @Override
            public void onNext(Helloworld.HelloReply helloReply) {
                System.out.println("返回了結果\n");
            }

            @Override
            public void onError(Throwable throwable) {

            }

            @Override
            public void onCompleted() {

            }
        };
        Helloworld.HelloRequest request = Helloworld.HelloRequest.newBuilder().setName("hello world").build();
        StreamObserver<Helloworld.HelloRequest> result = greeterStub.methodDoubleStream(responseObserver);
        result.onNext(request);
        result.onNext(request);
        result.onNext(request);
        result.onCompleted();
        try {
            Thread.sleep(6000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
}

 

響應結果

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM