【发布时间】:2022-01-15 18:03:06
【问题描述】:
是否可以通过 Indy HTTP 服务器以块的形式向请求客户端发送大量文本(csv 数据库导出)以避免遇到内存限制?
我正在用 Delphi 10.4.2 编写的应用程序服务器中实现一个 REST 接口,因为由于一些不可协商的原因,我无法公开数据库连接。
数据将由使用 R 的统计学家使用。
由于数据量可以增长到 1 GB,我不喜欢填充字符串并将其写入连接。
【问题讨论】:
-
如果响应数据被定向到客户端的文件流,1 GB的数据大小不会影响客户端的RAM使用。 Indy HTTP 客户端支持这种基于文件流的响应处理。
-
谢谢。上面链接后面的 Remys 代码应该可以完成这项工作。我会将查询结果写入文件并分块发送。我希望 R 可以处理...
-
@mjn 需要
chunked传输编码是正确的,但是您提供的链接与该编码无关。也许您的意思是this answer? -
@MichaSchumann 链接到的答案是使用
Range请求标头处理HTTP 请求。这与您的要求无关。如果你想分块发送大量数据,使用TIdHTTPRangeStream是错误的方法。您正在寻找的是 HTTP 1.1 及更高版本中的 'chunked' transfer encoding,如 this answer 中所示。 -
感谢您提供的信息。
标签: csv http delphi indy indy10