grpc - grpc服务是否必须只有一个输入参数和一个返回值

标签 grpc

假设我有一个像这样的原型(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/

相关文章:

C++ "error: no type named ‘type’ 在 ‘class std::result_of< ... >"

使用 gRPC Web 进入 WebAssembly

dart - Flutter gRPC 错误 - 操作系统错误 : Connection refused

java - 为 gRPC ServerInterceptors 设置执行顺序

visual-studio - 在 Windows 上为 Visual C++ 链接 gRPC

python - 在 Ubuntu 上安装/编译 grpc 时出错

node.js - Node-gyp 和自定义依赖/库/头文件安装路径

golang-grpc 服务 - 从另一个文件导入类型

go - 服务器或客户端如何知道连接是否断开?

java - 如何在Java中设置Grpc连接最大限制?