gRPCはGoogleによって開発された、異なるデバイスやアプリケーション間で関数や手続きを呼び出すための*1フレームワークです。
HTTP/2を利用してバイナリ形式でデータをやり取りすることで、アプリケーション間を低遅延で安定した通信網でつなぐ事ができます。
modbusのような産業用通信でもバイナリ形式を使いますが、gRPCのソレはネットワーク内の機器間の通信に加えて、同一PC内のアプリケーション疎通などにも利用できます。
Googleでは内部リソース間のやり取りで広く採用されいるそうです。
また、面白いところだとArduinoのCLIインターフェイスの実装でも使われています。
実際のところ
環境構築
$ pip install grpcio $ pip install grpcio-tools
Protocol Bufferファイル
gRPCはメッセージ内容をProtocol Bufferファイルちうので定義します。
ROSのmsgみたいなモンでしょうか。
以下の内容で"helloworld.proto"を作成
syntax = "proto3"; package helloworld; service Greeter { // Sends a greeting rpc SayHello (HelloRequest) returns (HelloReply) {} } message HelloRequest { string name = 1; } message HelloReply { string message = 1; }
protocol buffer ファイルをコンパイルする
protocol bufferは"protobufコンパイラ"なるモノをつかって
ベースとなるクライアントとサーバーを用意します。
modbusのようなバイナリで通信するので、それの元となるデータ群はコンパイルせんといかんのですね。
変換コマンドは次の通り
$ python -m grpc_tools.protoc -I. --python_out=. --grpc_python_out=. helloworld.proto
やってみると、pythonファイルが二つ追加されることがわかります。
$ ls helloworld.proto helloworld_pb2.py helloworld_pb2_grpc.py
*1: リモートプロシージャコール(RPC)