不带参数的Protobuf RPC Service方法

时间:2015-04-16 22:44:57

标签: protocol-buffers protorpc

我尝试使用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),它可以正常工作,但在这种情况下,该方法不需要任何参数..有没有办法做到这一点,或者根本不支持?< / p>

2 个答案:

答案 0 :(得分:45)

您必须指定输入类型。如果您不希望该方法采用任何参数,请定义一个空消息类型,如:

message WhoAreYouParams {}

这是必需的原因,如果您以后需要添加可选参数,则可以在不破坏现有代码的情况下执行此操作。

答案 1 :(得分:17)

您可以指定google.protobuf.Empty而不是您自己的空消息。 示例:

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

别忘了导入适当的原始文件:

import "google/protobuf/empty.proto";