概要
gRPCはProtocol Buffersを喋るもの同士ではメリットが大きいですが、RESTしか叩け無いものや、curlでRESTを叩くようにサクッと検証したかったりするときに不便です。
そんな問題を解消してくれるのがgrpc-gatewayで、protobuf定義からREST APIを提供するリバースプロキシを生成してくれます。
前回の
gRPCにおける各RPC方式の実装方法【Client streaming RPC】 - Carpe Diem
に引き続き、最後はBidirectional streaming RPCの実装方法を紹介します。
チャットのようなリアルタイム通信や、大きなデータを少しずつ処理したい時、Simple RPCで毎回コネクションを張るコストを避けたい時などに有用です。
最終的に出来たコードはこちら
続きを読む前回の
gRPCにおける各RPC方式の実装方法【Server streaming RPC】 - Carpe Diem
に引き続き、今回はClient streaming RPCの実装方法を紹介します。
こちらは大きなリクエストを分割して送りたい時に有用です。
最終的に出来たコードはこちら
続きを読む前回の
gRPCにおける各RPC方式の実装方法【Simple RPC】 - Carpe Diem
に引き続き、今回はServer streaming RPCの実装方法を紹介します。
サーバ側から複数のレスポンスを送ることができるので、フィードなどをReactiveに取得したい時に使ったり、サーバサイドプッシュを使いたい時などで有用です。
最終的に出来たコードはこちら
続きを読むgRPCは4つのRPC方式を持っています。
RPC方式 | 説明 | 使い所 |
---|---|---|
Unary(Simple) RPC | シンプルな1 Request - 1 Response方式 | 一般的なマイクロサービスなど |
Server streaming RPC | 1 Request - N Response方式 | サーバサイドプッシュ・フィードなど |
Client streaming RPC | N Request - 1 Response方式 | データアップロードなど |
Bidirectional streaming RPC | 1つのTPCコネクションの中で、RequestとResponseの送受信を任意数繰り返す。 WebSocketに近い? |
チャットなど双方向の同期が欲しい時。 コネクション数を節約したい時 |
ref: grpc / gRPC Concepts
それぞれ実装が異なるので、各方式での書き方を簡単に紹介します。
今回はSimple RPCのやり方です。
gRPCなどで使われているprotobufですが、.proto
の定義は簡単でもコンパイルにちょっと学習コストがかかります。
gogoproto
やgrpc-gateway
といった他のライブラリも使うと、中々にカオスなコマンドになります。
protoc -I/usr/local/include -I. \ -I$GOPATH/src \ -I$GOPATH/src/github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis \ --grpc-gateway_out=logtostderr=true:. \ path/to/your_service.proto
ref: https://github.com/grpc-ecosystem/grpc-gateway
この辺の手間を解決してくれるのが次のツールです。
面倒なコマンドをオプションで簡単に使えるようにしてくれます。
続きを読む