gpt4 book ai didi

grpc - 如何使用 Grpc 流式传输数组?

转载 作者:行者123 更新时间:2023-12-05 04:40:24 28 4
gpt4 key购买 nike

我想传输一个 int64 数组。
我查了一下如何使用它。在我的原型(prototype)文件中,我需要一个流:

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[]”。

最佳答案

对于流与重复的问题,答案是:视情况而定。

两者的区别在于:

  • streaming 发送一条或多条消息(每条消息可能包含重复字段)
  • unary 发送包含重复字段的单个消息

所以,我认为你的决定是基于:

  • 服务器如何获取repeated字段。
  • 消息的大小(包括正在发送的重复字段)
  • 消息的“完整性”

如果服务器无法一次性获取整个重复字段,那么你的答案就更简单了;服务器在获取消息时需要对消息(包括重复字段)进行流式传输。

根据消息的“完整性”,将消息分解为多个(流式传输)是有问题的。如果重复字段必须作为单个 block 传输,几乎作为事务单元传输,那么我认为您可能更愿意不将消息作为 block 传输。

您还应该考虑对您的客户造成的后果。您的客户是否能够收到一条较大的消息,或者是否会首选许多较小的消息,例如资源受限的 IoT SoC 设备。

否则,如果单个消息很大1,那么您需要将它们分解成更小的“片段”并流式传输。

1:Large Data Set并注意每条消息有 2GB 的硬性限制。

关于grpc - 如何使用 Grpc 流式传输数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70277853/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com