最近,我正在研究构建gRPC客户端 - 服务器交互 .
我写了一个gRPC服务:
service SearchService {
rpc Find (SearchReq) returns (SearchRes);
}
然后我应该使用存根(另一个java应用程序)在客户端调用它 .
这两种存根的区别是什么?
SearchServiceGrpc.SearchServiceFutureStub futureStub = SearchServiceGrpc.newFutureStub(channel);
SearchServiceGrpc.SearchServiceBlockingStub blockingStub = SearchServiceGrpc.newBlockingStub(channel);
blockingStub.find(request);
- 用于阻止
futureStub.find(request).get();
- 为了将来
我理解java中的Futures是如何工作的,但是我不明白gRPC里面发生了什么以及什么类型的存根调用更有效率
我发现谷歌没有关于它的信息 .
谢谢!
1 回答
使用相同的异步API(ClientCall)实现各种存根 . 您的选择对于grpc内部结构无关紧要 .
但API具有正常的预期限制 . 例如:如果使用阻塞,则在RPC完成之前不能使用该线程 .