クイックスタート

このガイドでは、DartでgRPCを始めるための簡単な実例を紹介します。

クイックスタート

このガイドでは、DartでgRPCを始めるための簡単な実例を紹介します。

前提条件

サンプルコードを取得する

サンプルコードは、grpc-dartリポジトリの一部です。

  1. リポジトリをzipファイルとしてダウンロードして解凍するか、リポジトリをクローンします。

    $ git clone https://github.com/grpc/grpc-dart
    
  2. クイックスタートのサンプルディレクトリに移動します。

    $ cd grpc-dart/example/helloworld
    

サンプルを実行する

example/helloworldディレクトリから

  1. パッケージの依存関係をダウンロードします。

    $ dart pub get
    
  2. サーバーを実行します。

    $ dart bin/server.dart
    
  3. 別のターミナルから、クライアントを実行します。

    $ dart bin/client.dart
    Greeter client received: Hello, world!
    

おめでとうございます! gRPCを使用したクライアントサーバーアプリケーションを実行しました。

アプリを更新する

このセクションでは、追加のサーバーメソッドを使用するようにアプリを更新します。 gRPCサービスは、プロトコルバッファを使用して定義されます。 .protoファイルでサービスを定義する方法の詳細については、基本チュートリアルを参照してください。今のところ、知っておく必要があるのは、サーバーとクライアントスタブの両方に、クライアントから`HelloRequest`パラメータを受け取り、サーバーから`HelloReply`を返す`SayHello()` RPCメソッドがあり、メソッドは次のように定義されていることです。

// The greeting service definition.
service Greeter {
  // Sends a greeting
  rpc SayHello (HelloRequest) returns (HelloReply) {}
}

// The request message containing the user's name.
message HelloRequest {
  string name = 1;
}

// The response message containing the greetings
message HelloReply {
  string message = 1;
}

gRPCサービスを更新する

protos/helloworld.protoを開き、同じリクエストとレスポンスタイプを持つ新しい`SayHelloAgain()`メソッドを追加します。

// The greeting service definition.
service Greeter {
  // Sends a greeting
  rpc SayHello (HelloRequest) returns (HelloReply) {}
  // Sends another greeting
  rpc SayHelloAgain (HelloRequest) returns (HelloReply) {}
}

// The request message containing the user's name.
message HelloRequest {
  string name = 1;
}

// The response message containing the greetings
message HelloReply {
  string message = 1;
}

ファイルを保存することを忘れないでください!

gRPCコードを再生成する

新しいサービスメソッドを使用する前に、更新されたprotoファイルを再コンパイルする必要があります。 `example/helloworld`ディレクトリから、次のコマンドを実行します。

$ protoc --dart_out=grpc:lib/src/generated -Iprotos protos/helloworld.proto

再生成されたリクエストとレスポンスのクラス、およびクライアントとサーバーのクラスは、`lib/src/generated`ディレクトリにあります。

次に、それぞれサーバーとクライアントコードで新しいRPCを実装して呼び出します。

サーバーを更新する

`bin/server.dart`を開き、`GreeterService`クラスに次の`sayHelloAgain()`メソッドを追加します。

class GreeterService extends GreeterServiceBase {
  @override
  Future<HelloReply> sayHello(ServiceCall call, HelloRequest request) async {
    return HelloReply()..message = 'Hello, ${request.name}!';
  }

  @override
  Future<HelloReply> sayHelloAgain(ServiceCall call, HelloRequest request) async {
    return HelloReply()..message = 'Hello again, ${request.name}!';
  }
}

クライアントを更新する

次のように、`bin/client.dart`に`sayHelloAgain()`の呼び出しを追加します。

Future<void> main(List<String> args) async {
  final channel = ClientChannel(
    'localhost',
    port: 50051,
    options: const ChannelOptions(credentials: ChannelCredentials.insecure()),
  );
  final stub = GreeterClient(channel);

  final name = args.isNotEmpty ? args[0] : 'world';

  try {
    var response = await stub.sayHello(HelloRequest()..name = name);
    print('Greeter client received: ${response.message}');
    response = await stub.sayHelloAgain(HelloRequest()..name = name);
    print('Greeter client received: ${response.message}');
  } catch (e) {
    print('Caught error: $e');
  }
  await channel.shutdown();
}

更新されたアプリを実行する

以前と同様に、クライアントとサーバーを実行します。 `example/helloworld`ディレクトリから次のコマンドを実行します。

  1. サーバーを実行します。

    $ dart bin/server.dart
    
  2. 別のターミナルから、クライアントを実行します。今回は、コマンドライン引数として名前を追加します。

    $ dart bin/client.dart Alice
    

    次の出力が表示されます。

    Greeter client received: Hello, Alice!
    Greeter client received: Hello again, Alice!
    

貢献

Dart gRPCで問題が発生した場合、または機能リクエストがある場合は、問題を作成 grpc-dartリポジトリを介して。

次のステップ