UGA Boxxx

つぶやきの延長のつもりで、知ったこと思ったこと書いてます

【gRPC】gRPCとは

grpc.io

gRPCとは

通信方式

gRPCはサービスを定義するという考えに基づいており、パラメーターと戻り値に静的な型を使用してリモートで呼び出すことができるメソッドを指定する

gRPCは次の4種類のサービス方法を定義できる

①通常の関数呼び出しと同じように、クライアントがサーバーに1つのリクエストを送信し、1つのレスポンスを返すRPC

rpc SayHello(HelloRequest) returns (HelloResponse);

②クライアントがサーバーにリクエストを送信し、一連のメッセージを読み戻すためのストリームを取得するサーバーストリーミングRPC
クライアントは、メッセージがなくなるまで、返されたストリームを読み取る

rpc LotsOfReplies(HelloRequest) returns (stream HelloResponse);

③クライアントが提供されたストリームに連続したメッセージを書き込み、サーバーに送信するクライアントストリーミングRPC
クライアントはメッセージの書き込みを終了すると、サーバーがメッセージを読み取って応答を返すのを待つ

rpc LotsOfGreetings(stream HelloRequest) returns (HelloResponse);

④ 両側が読み取り/書き込みストリームを使用して連続したメッセージを送信する双方向ストリーミングRPC
2つのストリームは独立して動作するため、クライアントとサーバーは任意の順序で読み取りと書き込みを行うことができる

rpc BidiHello(stream HelloRequest) returns (stream HelloResponse);

メリット

  • パラメーターを型付けした状態で扱える
  • IDLを修正しないとコードの自動生成に反映されないため、API仕様が最新に保たれる
  • 対応言語が多いので、特定のプログラミング言語に依存しない