Protocol buffers 如何在Protobuf服务rpc中返回数组

Protocol buffers 如何在Protobuf服务rpc中返回数组,protocol-buffers,rpc,Protocol Buffers,Rpc,我的.proto文件中有以下架构: service MyService { rpc GetItem (ItemQuery) returns (Item) { } } message ItemQuery { int id = 1; } message Item { int id = 1; string name = 2; } 现在我想添加另一个rpc方法来返回多个项。 大概是这样的: rpc GetItems (ItemsQuery) returns (

我的
.proto
文件中有以下架构:

service MyService {
    rpc GetItem (ItemQuery) returns (Item) {
    }
}

message ItemQuery {
    int id = 1;
}
message Item {
    int id = 1;
    string name = 2;
}
现在我想添加另一个rpc方法来返回多个项。 大概是这样的:

rpc GetItems (ItemsQuery) returns (repeated Item) {
}
有没有比定义邮件更好的方法?

选项1-使用流:

rpc GetItems (ItemsQuery) returns (stream Item) {
}
选项2-设置将使用重复对象的响应消息:

service MyService {
    rpc GetItem (ItemQuery) returns (ItemResponse) {
    }
}

message ItemQuery {
    int id = 1;
}
message ItemResponse {
    repeated Item items = 1;
}
message Item {
    int id = 1;
    string name = 2;
}

我参加聚会迟到了,但是:选项2比选项1有什么优势吗?选项1是一个流,它意味着您返回一个迭代器,这意味着您可以在服务器发送完所有项目之前就开始在客户端处理这些项目。选项2是一个响应对象,其中包含项目列表。您可以向ItemResponse添加一些其他属性(一些元数据等)…嗨,我们是否可以返回一个无键数组响应作为gRPC中的响应?我试过流,但没用。