🐁
Go × gRPC を使って複数の画像を送受信する
はじめに
Go で実装されたサーバーにおいて画像を GET / POST (REST) する機能がありました。
REST を gRPC に置き換えようとしたとき、画像のような大きなサイズのデータのやりとりを行うとエラーが発生します。それを回避するために gRPC の stream を使うことにしました。が、複数画像の送受信を行う方法がわかりませんでした。そこで実際に手を動かして確かめたので備忘録として記事化しました。
gRPC
gRPC は .proto
ファイルとして仕様を定義しそこからサーバー・クライアントに必要なコードの雛形を生成します。実装においてあたかもローカル・オブジェクトであるかのように、別のマシンにあるサーバ・アプリケーションのメソッドを直接呼び出すことができます。
install tool version
go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.28
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.2
単数の送受信
以下のブログを参考にして実装させていただきました。
server
client
複数の送受信
単数の場合は分割でデータを送信してもどのデータであるか判別できます。しかし、複数となると判別できないのでは?と困りました。
が、シンプルに分割したデータであってもどのデータであるか判別できるように ID を振り分類して受信するようにと実装しました。
server
client
テストコードにてオリジナルの画像データがサーバーでの送信・受信 / クライアントでの送信・受信のデータと同じであることを検証しています。
おわりに
今回実装したコードは以下に置いておきます。
Discussion