繁体   English   中英

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

[英]gRPC in Java - Blocking/nonblocking stubs

我正在尝试创建一个java grpc客户端来与go中的服务器通信。 我是grpc的新手,所以按照本教程gRPC Java Tutorial 在这些示例中,它们指的是阻塞和非阻塞存根,它们似乎从其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存根类,并在proto文件中找到服务声明。 存根类是客户端用于在服务端点上进行rpc调用的API。

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

阻塞存根是同步的(阻止当前运行的线程)并确保在它上面调用的rpc调用在返回响应或引发异常之前不会返回。 应该注意不要从UI线程调用阻塞存根上的rpc,因为这将导致无响应/ janky UI。

异步存根通过StreamObserver回调对象进行非阻塞rpc调用,其中响应是异步返回的。

有关更多信息,请参阅此处有关存根的grpc文档。

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

如果按照说明从Github克隆项目并构建它,这应该都会自动发生。 确保按照他们的说法克隆v1.4.0标记,而不是master ,否则你可能会遇到问题:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM