protobuf服务方法可以return原始类型吗?
Can protobuf service method return primitive type?
我正在尝试使用 Google protobuf,我有以下描述:
message.proto 文件:
message Request {
required int32 id = 1;
optional string value = 2;
}
service.proto 文件:
import "message.proto";
service Service {
rpc request (Request) returns (bool);
}
我正在尝试生成 C++ 源并遇到错误:
$ protoc service.proto --cpp_out=/tmp/proto/build
service.proto:4:40: Expected message type.
我必须 return 用户定义的类型吗?是否支持原始(如 bool
或 string
)?我可以使用基本类型作为服务方法参数(而不是我示例中的 Request
)吗?
不,您不能将原始类型用作请求或响应。您必须使用消息类型。
这很重要,因为以后可以扩展消息类型,以防您决定要添加新参数或 return 一些额外数据。
如果你想 return 原始类型,将它包装在 message
和 return 中:
message Name {
string name = 1;
}
如果您不想 return 任何东西,void
我的意思是,您可以创建一条空消息:
message Void {}
message Name {
string name = 1;
}
..
service MyService{
rpc MyFunc(Name) returns (Void);
}
您可以 return 标量数据类型,例如 bool、int 等,方法是 wrappers.proto
service.proto 文件:
import "message.proto";
import "google/protobuf/wrappers.proto";
service Service {
rpc request (Request) returns (.google.protobuf.BoolValue);
}
我正在尝试使用 Google protobuf,我有以下描述:
message.proto 文件:
message Request {
required int32 id = 1;
optional string value = 2;
}
service.proto 文件:
import "message.proto";
service Service {
rpc request (Request) returns (bool);
}
我正在尝试生成 C++ 源并遇到错误:
$ protoc service.proto --cpp_out=/tmp/proto/build
service.proto:4:40: Expected message type.
我必须 return 用户定义的类型吗?是否支持原始(如 bool
或 string
)?我可以使用基本类型作为服务方法参数(而不是我示例中的 Request
)吗?
不,您不能将原始类型用作请求或响应。您必须使用消息类型。
这很重要,因为以后可以扩展消息类型,以防您决定要添加新参数或 return 一些额外数据。
如果你想 return 原始类型,将它包装在 message
和 return 中:
message Name {
string name = 1;
}
如果您不想 return 任何东西,void
我的意思是,您可以创建一条空消息:
message Void {}
message Name {
string name = 1;
}
..
service MyService{
rpc MyFunc(Name) returns (Void);
}
您可以 return 标量数据类型,例如 bool、int 等,方法是 wrappers.proto
service.proto 文件:
import "message.proto";
import "google/protobuf/wrappers.proto";
service Service {
rpc request (Request) returns (.google.protobuf.BoolValue);
}