gRPC の C# サンプルを動かしてみる
gRPC は Google によって開発された RPC(Remote Procedure Call) フレームワークです。
まずは、公式のサンプルプロジェクトを動かすところから試してみました。
動作環境
- Windows 10 バージョン 1809 ビルド 17763
- Visual Studio 2017
C# のサンプルプロジェクト
公式ドキュメントはこちらです。
まず、GitHub の gRPC リポジトリをクローンします。
$ git clone -b v1.19.0 https://github.com/grpc/grpc
クローンした grpc フォルダの中にある examples\csharp\Helloworld\Greeter.sln
を Visual Studio で開きます。
Greeter, GreeterClient, GreeterServer という3つのプロジェクトが含まれていました。
動かしてみる
GreeterClient と GreeterServer をそれぞれ実行します。
ただし、自分の環境ではそれぞれのプロジェクトにある Program.cs で指定されているポート番号を変更する必要がありました。
詳しいことは良くわからないのですが、デフォルトで指定されている 50051 ポートは Windows では何かの用途で確保されていて使えないようです。
参考: https://support.microsoft.com/en-us/help/4093046/ports-blocked-after-you-install-monthly-rollup-package-kb4074588
今回はポート番号を10051に変更して動作させました。
GreeterServer
GreeterClient
コードの抜粋
以下はサンプルコードから抜粋したコードです。
サーバ側のコード
クライアント側のコード
クライアント側では Name に "you" を代入した HelloRequest メッセージを作成し、SayHello メソッドを呼んでいます。
サーバ側では、Message に "Hello " + request.Name (ここでは "Hello you")を代入した HelloReply メッセージを返します。
クライアント側で HelloReply の Message を表示すると、"Hello you" が表示されます。
.proto ファイル
.proto ファイルは Protocol Buffers(プロトコルバッファ)のメッセージ構造を記述するものです。
gRPC は Protocl Buffers を使っていて、.proto ファイルでRPCのメソッドやメッセージ型を定義します。
サンプルプログラムでは、以下のような定義になっています。
記法を知らなくても、なんとなく以下のような定義が読み取れます。
- Greeter という サービスは、HelloRequest を引数にとり、HelloReply を返す SayHello というメソッドを持っている
- HelloRequest というメッセージ型には、string 型の name というフィールドがある
- HelloReply というメッセージ型には、string 型の message というフィールドがある
この proto ファイルによる定義から、各言語(今回はC#)用のスクリプトが自動生成されます。
おわりに
今回は gRPC の C# サンプルプログラムを動かしてみました。
次回は、空の UWP プロジェクトから gRPC クライアントを作成し、このサンプルプログラムと通信できるようにしようと思います。