【问题标题】:gRPC: creating Blocking or Future StubsgRPC:创建阻塞或未来存根
【发布时间】:2018-01-24 09:32:41
【问题描述】:

最近,我正在研究构建 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(); - 未来

我了解 Futures 在 java 中的工作原理, 但我不明白 gRPC 内部发生了什么以及哪种类型的存根调用更有效率

我在谷歌上没有找到关于它的信息。

谢谢!

【问题讨论】:

    标签: java future grpc stub grpc-java


    【解决方案1】:

    各种存根使用相同的异步 API (ClientCall) 实现。您的选择对于 grpc 内部无关紧要。

    但 API 具有正常的预期限制。例如:如果您使用阻塞,则在 RPC 完成之前无法使用该线程。

    【讨论】:

    • 原来future和blocking stub在性能上没有区别,除了在客户端调用?我在哪里可以阅读完整的码头?
    • 未来 vs 阻塞不会影响用于与服务器通信的协议。
    • 谢谢,我明白了! :D
    猜你喜欢
    • 2018-01-04
    • 2020-11-12
    • 2020-02-12
    • 1970-01-01
    • 1970-01-01
    • 2012-08-14
    • 1970-01-01
    • 2014-05-25
    • 1970-01-01
    相关资源
    最近更新 更多