gRPCは通信方法にHTTP/2を使用することにより、一般的なRPCにおける1Request-1Responseな方式の他、1つのTCPコネクションの中で複数のRequest/Responseをやり取りすることが可能となっている。
このTIPSでは、gRPCで使用できるRPCの方式と、protoファイルへの定義方法について記載する。protocolbuffers自体の定義方法は、ここでは省略する。
##1.Simple-RPC
Simple-RPC方式は、一般的なRPCと同様の1Request-1Responseな方式。
HTTP/2の恩恵はあまり受けられないが、最もシンプルで制御し易い方法と言える。
定義方法
syntax = "proto3"
service MyService {
rpc simpleRPC(MyRequest) returns (MyResponse){}
}
##2.ServerSideStreaming-RPC
クライアントから1つのリクエストを投げた後、サーバーから1〜任意数のレスポンスを受け取ることができる方式。レスポンスの内容を「まとめて」ではなくても良いから少しでも早く欲しい場合に有用。
定義方法
syntax = "proto3"
service MyService {
rpc serverSideStreamingRPC(MyRequest) returns (stream MyResponse) {}
}
メッセージの前にstreamが付いていることに注意。
##3.ClientSideStreaming-RPC
クライアントから1〜任意数のリクエストを投げた後、サーバーから1つのレスポンスを受け取る方式。クライアントからのリクエストが送付され終わるのを待たず、少しでも早くサーバー側でのリクエスト処理を開始したい場合に有用。
定義方法
syntax = "proto3"
service MyService {
rpc clientSideStreamingRPC(stream MyRequest) returns (MyResponse) {}
}
##4.BidirectionalStreaming-RPC
1つのTPCコネクションの中で、RequestとResponseの送受信を任意数繰り返す方式。HTTP/2の恩恵を最も受けることができる反面、実装は複雑になる。
定義方法
syntax = "proto3"
service MyService {
rpc bidirectionalStreamingRPC (stream MyRequest) returns (stream MyResponse) {}
}
今回は以上です。お疲れ様でした。