我想传输一个int64数组。
我查找了如何使用它。在我的proto文件中,我要么需要一个流:
service myService {
rpc GetValues(myRequest) returns (stream myResponse);
}
message myRequest {
}
message myResponse {
int64 values = 1;
}
或重复响应:
message myRepeatedResponse {
repeated int64 value = 1;
}
一种选择比另一种好吗
我的用例是,我想从数据库中读取最新的x个条目,并将这些值作为数组发送给我的客户端
但我不知道该怎么做,因为在MyService.MyService.Base的重写函数中分配值时,我只能传递"long"类型的值,而不能传递"long[]"。
对于流与重复问题,答案是:这取决于。
两者的区别在于:
- 流发送一条或多条消息(每条消息可能包含重复字段(
- 一元发送包含重复字段的单个消息
所以,我认为你的决定是基于:
- 服务器如何获取重复字段
- 消息的大小(包括正在发送的重复字段(
- 消息的"完整性">
如果服务器无法一次性获得整个重复字段,则您的答案更简单;服务器将需要在获得消息时对消息进行流式传输(包括重复字段(。
根据消息的"完整性",将消息分解为多个(流式传输(是否存在问题。如果重复字段必须作为单个块来传输,几乎是作为事务单元来传输,那么我认为您可能更喜欢不将消息作为块进行流式传输。
您还应该考虑对您的客户造成的后果。您的客户是否能够接收一条较大的消息,或者是否更喜欢许多较小的消息,例如资源受限的物联网SoC设备。
否则,如果单个消息较大1,则您需要将它们分解为较小的"片段"并进行流式传输。
1:大型数据集,注意有2GB/消息的硬限制。