gRPC echo-server with golang
MIT License
This sample repository is an echo server with gRPC(protobuf) implemented with Golang.
GolangでgRPCアプリケーションを開発するにあたって必要そうな知識を整理する
gRPCの全体像(http://www.grpc.io/docs/より転載)
*.proto
ファイルに IDL(Interactive Data Language) でデータ構造を記述するprotoc
コマンドでコンパイルする)Protocol Buffers利用フロー(https://www.apps-gcp.com/grpc-go/より転載)
protoc-gen-go
コマンドを利用protoc-gen-go-grpc
コマンドができた.gPRCのサーバ/クライアントに用いるインターフェース(スタブコード)を生成ためにこのコマンドを利用対応表
対象 | APIv1 | APIv2 |
---|---|---|
import のパス | github.com/golang/protobuf | google.golang.org/protobuf |
ソースのリポジトリ | https://github.com/golang/protobuf | https://github.com/protocolbuffers/protobuf-go |
protoc-gen-go | github.com/golang/protobuf/protoc-gen-go | google.golang.org/protobuf/cmd/protoc-gen-go |
gRPCスタブコード生成 | 同上 | google.golang.org/grpc/cmd/protoc-gen-go-grpc |
Protocol Buffers用 Go言語APIの APIv1 と APIv2 の差異より転載
Protocol Buffers: ざっくりとした入門 や いまさらだけどgRPCに入門したので分かりやすくまとめてみた などに従いつつ,golang製サーバーがprotobufで書かれたスキーマで通信されている様子をみる.
スキーマ helloworld.proto
を元に,protoc
でgolang向けのstubコードを生成する.
golang向けのstubコードの生成にはプラグイン(google.golang.org/protobuf/cmd/protoc-gen-go)が必要になるが,protocコマンドとそのプラグインがセットになった仮想環境ghcr.io/tk42/protoc
イメージを使って,そのあたりの工程はスキップする.(便利!)
docker compose run protoc
.proto
では生成されるパッケージの指定go_packages
を指定しなければエラーになる.
protocの引数は--go_grpc_out
を含めることを忘れないようにする.これがないとスタブコードにRegisterXXX
が作成されない.
その他はprotocの使い方を参照する
生成されたスタブコードは proto/autogen/helloworld.pb.go
に配置される.
このコードをserver/main.go
に埋め込み,呼び出すようにする.
サーバ側は通常のgolangコンテナでビルド,実行を行う.
gRPC版のcurl
ともいうべきCLIツール grpcurl
のWebフロントラッパー fullstorydev/grpcurl を仮想化されたイメージ wongnai/grpcui を利用して,ブラウザ経由でサーバとgRPC通信する.
docker compose up server client
そして,http://0.0.0.0:5000/ へブラウザからアクセスする
試しに,リクエストとして name=John
を送信すると…
レスポンスの message
に Hello John
が返される.