web-dev-qa-db-ja.com

gRPC in Java-ブロッキング/非ブロッキングスタブ

外出先でサーバーと通信するためにJava grpcクライアントを作成しようとしています。grpcは初めてなので、このチュートリアルに従っています gRPC Java =チュートリアル 。これらの例では、 github の他の場所からインポートしているように見えるブロッキングスタブと非ブロッキングスタブを参照しています。

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

ただし、これらのクラスはリポジトリに見つかりません。私はまだそれらが何のためにあるのか正確にぼんやりしています、それらは.protoファイルをコンパイルするときに生成されるべきでしたか?任意のヘルプ/ポインタをいただければ幸いです。ありがとう。

6
Dom Fraise

Grpcスタブクラスは、protocコンパイラを実行すると生成され、protoファイルでサービス宣言が見つかります。スタブクラスは、クライアントがサービスエンドポイントでrpc呼び出しを行うために使用するAPIです。

これらのスタブには、ブロッキングと非同期の2つの種類があります。

ブロッキングスタブは同期的であり(現在実行中のスレッドをブロックします)、スタブで呼び出されたrpc呼び出しが、応答を返すか例外を発生させるまで返されないようにします。 UIスレッドからブロッキングスタブでrpcを呼び出さないように注意する必要があります。これにより、UIが応答しなくなり、ぎこちなくなります。

非同期スタブは、非ブロッキングrpc呼び出しを行い、StreamObserverコールバックオブジェクトを介して応答が非同期に返されます。

詳細については、スタブに関するgrpcのドキュメントを参照してください ここ

9
Michael Krause

スタブクラスは実際に.protoファイルから生成され、これはprotobuf-gradle-pluginで自動的に発生するはずです。クライアント側のスタブクラスをカスタムコードで拡張して、データをサーバーに送信します。

指示に従ってGithubからプロジェクトのクローンを作成してビルドすると、これはすべて自動的に行われます。 masterではなくv1.4.0タグのクローンを作成してください。そうしないと、問題が発生する可能性があります。

git clone -b v1.4.0 https://github.com/grpc/grpc-Java.git
1
Uli