67

Google の Protocol Buffers を使用して RPC サービスを記述しようとしています

service WhoamiService {
  rpc WhoAreYou() returns (Whoami) {}
}

message Whoami {
  optional bytes request_id = 1;
  optional string hostname = 2;
  optional string message = 3;
}

この定義をコンパイルしようとすると、ピースExpected type nameを指すエラーが発生します。WhoAreYou()

に置き換えるWhoAreYou()と正常に動作しますWhoAreYou(Whoami)が、この場合、メソッドにはパラメーターは必要ありません.これを行う方法はありますか、それとも単にサポートされていませんか?

4

2 に答える 2

106

入力タイプを指定する必要があります。メソッドがパラメータを取りたくない場合は、次のように空のメッセージ タイプを定義します。

message WhoAreYouParams {}

これが必要な理由は、後でオプションのパラメーターを追加する必要がある場合に、既存のコードを壊さずに追加できるようにするためです。

于 2015-04-17T18:14:19.723 に答える
87

You can specify google.protobuf.Empty instead of your own empty message. Example:

rpc WhoAreYou(google.protobuf.Empty) returns (Whoami) {
}

Don't forget to import appropriate proto file:

import "google/protobuf/empty.proto";
于 2018-07-19T15:09:12.743 に答える