0

我正在做一个项目,我想在其中公开一个 API,该 API 将读取一个大文件并发送该文件作为响应。

由于文件可以很大,最好以块的形式发送文件,这样对系统的内存压力不会太大。

我评估了 2 个选项:HTTP-1.1 支持的分块传输(https://en.m.wikipedia.org/wiki/Chunked_transfer_encoding)和 grpc 的服务器端流。

在 grpc 方法中,客户端通过 rpc 请求,而服务器将通过 grpc 通道流式传输字节,并在完成后关闭相同的。

我的生态系统可以同时支持,客户端也支持 grpc。

您能否建议哪种选择更好,两种方法的优缺点是什么。

4

1 回答 1

0

两种方法都会产生相似的结果。只需选择您最喜欢的堆栈即可。

HTTP 分块使用以长度为前缀的批处理。gRPC 流使用以长度为前缀的消息。主要区别在于为您选择了分块的批量大小。

gRPC 使用分块来提供其流式传输,尽管分块在 HTTP/1.1 和 HTTP/2 之间的实现方式不同。使用 gRPC 时,主要是使用“合理”的消息大小;每条消息的开销约为 5-10 个字节。分块中也存在开销,只是您不必选择“合理”的消息大小。

分块和 gRPC 流都使用流水线,您可以在前一个块被完全接收和处理之前发送一个块。这减少了块大小对网络性能的影响。只要您选择至少 1 KB 的块大小,块大小就不会太重要,并且微调会迅速看到收益递减。

于 2022-02-10T20:27:16.017 回答