gRPC 如何传输一个巨大的字符串

gRPC how to stream a huge string

我有一个 c# grpc 服务,它可以请求以单个 json 字符串的形式获取设置,该字符串可能非常大,我不想一次发送所有内容。但是,字符串在完全到达之前无法处理。

我知道有一个选项可以在 protobuf 中使用 stream 关键字并在字符串到达​​时读取它,而不是将其作为一个整体发送。

我只找到了从流中接收多个项目的示例(使用 asyncServerStreamingCall.ResponseStream.MoveNext()),但是我不知道如何流式传输单个字符串。

我的问题是:

  1. 在这种情况下,流式传输是否是一种正确的方法,您只需要流式传输单个对象(在本例中为字符串),并且无法在它完全到达之前对其进行处理?

  2. 如何流式传输和接收这样的字符串(来自服务器端和客户端)?

正如您提到的,gRPC 中的流式传输是指在单个开放通道上发送多个离散操作。无论是一元还是流,gRPC 中的单个消息都必须完整地接收和决定——没有开放字节流的概念。相反,您将需要发送多条消息,每条消息都包含一些有效载荷片段,大概只是在 bytes 字段中,然后发送大有效载荷拆分成一定数量的此类消息。接收方需要将它们组合起来,可能附加到文件或类似文件,如果它对于内存存储来说太大而不方便的话。