gRPC:创建阻塞或未来存根
gRPC: creating Blocking or Future Stubs
最近在研究构建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 内部发生了什么,什么类型的存根调用更有效率
我找不到关于 google 的信息。
谢谢!
各种存根是使用相同的异步 API (ClientCall) 实现的。您的选择对 grpc 内部结构无关紧要。
但是 API 具有正常的预期限制。例如:如果您使用阻塞,则在 RPC 完成之前无法使用该线程。
最近在研究构建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 内部发生了什么,什么类型的存根调用更有效率
我找不到关于 google 的信息。
谢谢!
各种存根是使用相同的异步 API (ClientCall) 实现的。您的选择对 grpc 内部结构无关紧要。
但是 API 具有正常的预期限制。例如:如果您使用阻塞,则在 RPC 完成之前无法使用该线程。