2017-04-02 15 views
5

我在.proto文件下面的模式:如何返回的Protobuf服务RPC数组

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) { 
} 

有没有更好的办法做到这一点比定义项目的消息?

回答

10

选项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; 
} 
+0

,我迟到了党,但:是否选择2与选项1相比有什么优势?反之亦然? – LuMa

+1

选项1是一个流,它意味着您正在返回一个迭代器,这意味着即使在服务器完成发送之前,您也可以开始处理客户端上的项目。选项2是一个响应对象,其中包含您的项目列表。你可以添加一些其他的属性到你的ItemResponse(一些元数据等)... – Shoham