在.proto文件中再加一个方法
1 | rpc methodDoubleStream(stream Request) returns (stream Result){} |
实现
双向流的服务端和请求流的没啥区别,只是在接收到请求的时候没有立刻结束请求
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | @Override public StreamObserver<Request> methodDoubleStream(StreamObserver<Result> responseObserver) { return new StreamObserver<Request>() { @Override public void onNext(Request value) { System.out.print( "收到了请求 \n" ); Result result = Result.newBuilder().setResult1( "result1" ).setResult2( "result2" ).build(); responseObserver.onNext(result); } @Override public void onError(Throwable t) { } @Override public void onCompleted() { responseObserver.onCompleted(); } }; } |
客户端也没啥区别
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | @Test public void contextLoads4() { Request request = Request.newBuilder().setRequest1( "test1" ).setRequest2( "test2" ).build(); StreamObserver<Result> responseObserver = new StreamObserver<Result>() { @Override public void onNext(Result result) { System.out.print( "返回了结果 \n" ); } @Override public void onError(Throwable throwable) { } @Override public void onCompleted() { } }; StreamObserver<Request> result = javaGrpcClient.runAsync(o -> o.methodDoubleStream(responseObserver)); result.onNext(request); result.onNext(request); result.onNext(request); result.onCompleted(); try { Thread.sleep( 600000 ); } catch (Exception ex){} } |