我正在尝试创建Java grpc客户端以与Go中的服务器进行通信。我是grpc的新手,因此正在关注本教程gRPC Java Tutorial。在这些示例中,它们引用了阻塞和非阻塞 stub ,它们似乎是从github中的其他位置导入的。
import io.grpc.examples.routeguide.RouteGuideGrpc.RouteGuideBlockingStub;
import io.grpc.examples.routeguide.RouteGuideGrpc.RouteGuideStub;
...
...
blockingStub = RouteGuideGrpc.newBlockingStub(channel);
asyncStub = RouteGuideGrpc.newStub(channel);
但是我在他们的仓库中找不到这些类。我仍然不清楚它们的用途,在编译.proto文件时应该产生它们吗?任何帮助/指针,将不胜感激。谢谢。
最佳答案
当运行protoc编译器时,将生成grpc stub 类,并且在proto文件中找到服务声明。 stub 类是客户端用于在服务端点上进行rpc调用的API。
这些 stub 有两种形式:阻塞和异步。
阻塞 stub 是同步的(阻塞当前正在运行的线程),并确保在其上调用的rpc调用在返回响应或引发异常之前不会返回。应注意不要在UI线程的阻塞 stub 上调用rpc,因为这将导致UI响应迟钝/不稳定。
异步 stub 进行非阻塞的rpc调用,在该调用中,响应是通过StreamObserver回调对象异步返回的。
有关更多信息,请参阅关于 stub here的grpc文档。