2017-07-28 331 views
0

我正在尝试创建一个java grpc客户端来与服务器进行通信。我是grpc的新手,所以按照本教程gRPC Java Tutorial。在这些例子中,它们指的是阻塞和非阻塞存根,他们似乎从其他地方导入其githubJava中的gRPC - 阻塞/非阻塞存根

import io.grpc.examples.routeguide.RouteGuideGrpc.RouteGuideBlockingStub; 
import io.grpc.examples.routeguide.RouteGuideGrpc.RouteGuideStub; 
... 
...  
blockingStub = RouteGuideGrpc.newBlockingStub(channel); 
asyncStub = RouteGuideGrpc.newStub(channel); 

但是我找不到这些类的回购。如果在编译.proto文件时生成了它们,它们到底是什么?任何帮助/指针将不胜感激。谢谢。

回答

1

当您运行protoc编译器GRPC存根类生成,它发现一个服务宣告你的原型文件。存根类是您的客户端用来在服务端点上进行rpc调用的API。

这些存根有两种形式:阻塞和异步。

阻塞存根是同步的(块当前正在运行的线程),并确保调用其上的RPC调用不返回,直到返回响应或引发一个异常。应注意不要从UI线程调用阻塞存根控件上的rpc,因为这会导致无响应/非常棒的用户界面。

异步存根使其中该响应经由StreamObserver回调对象异步返回非阻塞RPC调用。

欲了解更多信息,请参阅有关存根here的GRPC文档。

1

存根类确实从.proto文件生成,这应该与protobuf的-gradle这个-插件自动发生。您可以使用任何自定义代码在客户端扩展存根类,以将数据发送到服务器。

如果按照说明克隆从Github上建立项目,这都应该自动发生。确保像他们说的,不master克隆v1.4.0标签,你很可能以其他方式遇到的问题:

git clone -b v1.4.0 https://github.com/grpc/grpc-java.git