67

我正在尝试使用 Google 的协议缓冲区来描述 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 回答