Java中的gRPC-阻塞/非阻塞存根

11

我正在尝试创建一个Java gRPC客户端,与Go服务器进行通信。由于对gRPC不熟悉,因此正在按照这个教程gRPC Java教程进行操作。在这些示例中,他们提到了阻塞和非阻塞 stubs,并从他们的github导入。

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

然而我在他们的存储库中找不到这些类。我仍然不太清楚它们究竟是用来做什么的,它们应该在编译.proto文件时生成吗?任何帮助/指针将不胜感激。谢谢。

2个回答

17
当您在proto文件中声明服务时,运行protoc编译器会生成grpc存根类。这些存根类是客户端使用的API,用于在服务端点上进行rpc调用。
这些存根分为两种类型:阻塞和异步。
阻塞存根是同步的(阻塞当前运行线程),确保在其上调用的rpc调用不会返回,直到它返回响应或引发异常。请注意,不要从UI线程调用阻塞存根上的rpc,否则会导致无响应/卡顿的用户界面。
异步存根进行非阻塞rpc调用,其中响应通过StreamObserver回调对象异步返回。
有关存根的更多信息,请参阅grpc文档此处

1
"这些桩类确实是从.proto文件生成的,protobuf-gradle-plugin应该会自动完成此过程。您可以在客户端上使用任何自定义代码来扩展这些桩类,以将数据发送到服务器。如果按照从Github克隆项目并构建它的说明操作,这一切都应该自动完成。请确保按照他们所说的克隆v1.4.0标签,而不是master,否则可能会遇到问题:"
git clone -b v1.4.0 https://github.com/grpc/grpc-java.git

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接