gRPC 如何传输一个巨大的字符串
gRPC how to stream a huge string
我有一个 c# grpc 服务,它可以请求以单个 json 字符串的形式获取设置,该字符串可能非常大,我不想一次发送所有内容。但是,字符串在完全到达之前无法处理。
我知道有一个选项可以在 protobuf 中使用 stream
关键字并在字符串到达时读取它,而不是将其作为一个整体发送。
我只找到了从流中接收多个项目的示例(使用 asyncServerStreamingCall.ResponseStream.MoveNext()
),但是我不知道如何流式传输单个字符串。
我的问题是:
在这种情况下,流式传输是否是一种正确的方法,您只需要流式传输单个对象(在本例中为字符串),并且无法在它完全到达之前对其进行处理?
如何流式传输和接收这样的字符串(来自服务器端和客户端)?
正如您提到的,gRPC 中的流式传输是指在单个开放通道上发送多个离散操作。无论是一元还是流,gRPC 中的单个消息都必须完整地接收和决定——没有开放字节流的概念。相反,您将需要发送多条消息,每条消息都包含一些有效载荷片段,大概只是在 bytes
字段中,然后发送大有效载荷拆分成一定数量的此类消息。接收方需要将它们组合起来,可能附加到文件或类似文件,如果它对于内存存储来说太大而不方便的话。
我有一个 c# grpc 服务,它可以请求以单个 json 字符串的形式获取设置,该字符串可能非常大,我不想一次发送所有内容。但是,字符串在完全到达之前无法处理。
我知道有一个选项可以在 protobuf 中使用 stream
关键字并在字符串到达时读取它,而不是将其作为一个整体发送。
我只找到了从流中接收多个项目的示例(使用 asyncServerStreamingCall.ResponseStream.MoveNext()
),但是我不知道如何流式传输单个字符串。
我的问题是:
在这种情况下,流式传输是否是一种正确的方法,您只需要流式传输单个对象(在本例中为字符串),并且无法在它完全到达之前对其进行处理?
如何流式传输和接收这样的字符串(来自服务器端和客户端)?
正如您提到的,gRPC 中的流式传输是指在单个开放通道上发送多个离散操作。无论是一元还是流,gRPC 中的单个消息都必须完整地接收和决定——没有开放字节流的概念。相反,您将需要发送多条消息,每条消息都包含一些有效载荷片段,大概只是在 bytes
字段中,然后发送大有效载荷拆分成一定数量的此类消息。接收方需要将它们组合起来,可能附加到文件或类似文件,如果它对于内存存储来说太大而不方便的话。