2017-07-28 85 views
0

我正在嘗試創建一個java grpc客戶端來與服務器進行通信。我是grpc的新手,所以按照本教程gRPC Java Tutorial。在這些例子中,它們指的是阻塞和非阻塞存根,他們似乎從其他地方導入其githubJava中的gRPC - 阻塞/非阻塞存根

import io.grpc.examples.routeguide.RouteGuideGrpc.RouteGuideBlockingStub; 
import io.grpc.examples.routeguide.RouteGuideGrpc.RouteGuideStub; 
... 
...  
blockingStub = RouteGuideGrpc.newBlockingStub(channel); 
asyncStub = RouteGuideGrpc.newStub(channel); 

但是我找不到這些類的回購。如果在編譯.proto文件時生成了它們,它們到底是什麼?任何幫助/指針將不勝感激。謝謝。

回答

1

當您運行protoc編譯器GRPC存根類生成,它發現一個服務宣告你的原型文件。存根類是您的客戶端用來在服務端點上進行rpc調用的API。

這些存根有兩種形式:阻塞和異步。

阻塞存根是同步的(塊當前正在運行的線程),並確保調用其上的RPC調用不返回,直到返回響應或引發一個異常。應注意不要從UI線程調用阻塞存根控件上的rpc,因爲這會導致無響應/非常棒的用戶界面。

異步存根使其中該響應經由StreamObserver回調對象異步返回非阻塞RPC調用。

欲瞭解更多信息,請參閱有關存根here的GRPC文檔。

1

存根類確實從.proto文件生成,這應該與protobuf的-gradle這個-插件自動發生。您可以使用任何自定義代碼在客戶端擴展存根類,以將數據發送到服務器。

如果按照說明克隆從Github上建立項目,這都應該自動發生。確保像他們說的,不master克隆v1.4.0標籤,你很可能以其他方式遇到的問題:

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