最近,我正在研究构建gRPC客户端-服务器交互。

我写了一个gRPC服务:

service SearchService {

    rpc Find (SearchReq) returns (SearchRes);

}


然后我应该使用stub(另一个Java应用程序)在客户端调用它。

这两种存根有什么区别?

SearchServiceGrpc.SearchServiceFutureStub futureStub = SearchServiceGrpc.newFutureStub(channel);

SearchServiceGrpc.SearchServiceBlockingStub blockingStub = SearchServiceGrpc.newBlockingStub(channel);


blockingStub.find(request);-用于阻止

futureStub.find(request).get();-面向未来

我了解Java中的Future如何运作,
但我不明白gRPC内部会发生什么,哪种类型的存根调用更有效

我在Google上找不到有关此信息。

谢谢!

最佳答案

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

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

08-03 12:54