xin9le.net

Microsoft の製品/技術が大好きな Microsoft MVP な管理人の技術ブログです。

gRPC / MagicOnion 入門 (2) - 4 種類の通信方式

gRPC は HTTP/2 の仕様に則った形で 4 種類の通信方式を提供しています。以下のドキュメントにも解説がありますが、簡単に図解します。

f:id:xin9le:20170604212009p:plain

Unary RPCs

最もシンプルな 1 リクエスト / 1 レスポンス型の通信方法です。通常の関数コールのように扱えるため、非常に分かりやすいのが特徴です。

f:id:xin9le:20170604153513p:plain

Server Streaming RPCs

クライアントが 1 度リクエストを送信し、サーバーから複数回数のレスポンスを返す方式です。クライアントはサーバーから送信完了の信号が来るまでストリームからメッセージを読み続けます。いわゆるサーバープッシュ型の実装に利用できます。

f:id:xin9le:20170604153542p:plain

Client Streaming RPCs

クライアントから複数回数のリクエストを送信し、それらを読み込んだサーバー側から 1 度のレスポンスを待つ方式です。サーバーはクライアントからリクエストの送信完了信号が来るまでストリームからメッセージを読み続け、レスポンスを返しません。

f:id:xin9le:20170604153550p:plain

Duplex Streaming RPCs

双方向ストリーミングの通信方式です。2 つのストリームはそれぞれ独立しているため、クライアントとサーバーはどのような順序でも読み書きが可能です。リクエストとレスポンスが 1 対 1 である必要がなく、扱い/実装共に難易度が高いのが特徴です。各ストリームのメッセージ送信順序は保証されます。

f:id:xin9le:20170604153558p:plain

ドキュメントには「Bidirectional Streaming」と記載されている場合がありますが、gRPC のコード上では「Duplex Streaming」とされているので、この連載では「Duplex Streaming」を使って解説を進めます。