假设我有一个像这样的原型(prototype)文件。我可以这样定义服务
rpc SayHello () returns (Response) {} //service has no input
rpc SayHello (Request1,Request2) returns (Response) {}//service has two inputs
//.proto文件
syntax = "proto3";
service Greeter{
rpc SayHello (Request) returns (Response) {}
}
message Request{
string request = 1;
}
message Response{
string response = 1;
}
最佳答案
gRPC 服务方法只有一条输入消息和一条输出消息。通常,这些消息仅用作一个方法的输入和输出。这是故意的,因为它允许稍后轻松添加新参数(到消息中),同时保持向后兼容性。
如果你不需要任何输入或输出参数,你可以使用众所周知的原型(prototype) google.protobuf.Empty 。但是,不鼓励这样做,因为它会阻止您将来向该方法添加参数。相反,我们鼓励您遵循正常做法,为请求提供一条消息,但不包含任何内容:
service Greeter {
rpc SayHello (SayHelloRequest) returns (SayHelloResponse) {}
}
message SayHelloRequest {} // service has no input
同样,如果您想要两个请求参数,只需将两个参数都包含在请求消息中即可:
message SayHelloRequest { // service has two inputs
string request = 1;
string anotherRequestParam = 2;
}
关于grpc - grpc服务是否必须只有一个输入参数和一个返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45316961/