需要 ChicagoBoss 中流响应的用例示例
Need an use case example for stream response in ChicagoBoss
ChicageBoss 控制器 API 有这个
{stream, Generator::function(), Acc0}
Stream a response to the client using HTTP chunked encoding. For each
chunk, the Generator function is passed an accumulator (initally Acc0)
and should return either {output, Data, Acc1} or done.
我想知道这有什么用例?还有其他类似Json,输出。这个stream
什么时候有用?
有人可以在现实世界中展示一个用例吗?
提供大文件下载可能是最直接的用例。
您可能会争辩说还有其他方法可以提供文件以便用户可以下载它们,但这些方法可能还有其他缺点:
- 通过流式传输文件,您不必在开始向客户端发送响应之前将整个文件读入内存。对于小文件,可以直接读取文件内容,return为
{output, BinaryContent, CustomHeader}
。但如果您想提供磁盘映像等大文件,这可能会变得棘手。
- 人们经常建议将可下载文件作为静态文件提供(例如 here)。但是,这些下载会绕过所有控制器,如果您需要下载计数器或访问限制之类的东西,这可能会成为一个问题。缓存也可能是一个问题。
ChicageBoss 控制器 API 有这个
{stream, Generator::function(), Acc0}
Stream a response to the client using HTTP chunked encoding. For each chunk, the Generator function is passed an accumulator (initally Acc0) and should return either {output, Data, Acc1} or done.
我想知道这有什么用例?还有其他类似Json,输出。这个stream
什么时候有用?
有人可以在现实世界中展示一个用例吗?
提供大文件下载可能是最直接的用例。
您可能会争辩说还有其他方法可以提供文件以便用户可以下载它们,但这些方法可能还有其他缺点:
- 通过流式传输文件,您不必在开始向客户端发送响应之前将整个文件读入内存。对于小文件,可以直接读取文件内容,return为
{output, BinaryContent, CustomHeader}
。但如果您想提供磁盘映像等大文件,这可能会变得棘手。 - 人们经常建议将可下载文件作为静态文件提供(例如 here)。但是,这些下载会绕过所有控制器,如果您需要下载计数器或访问限制之类的东西,这可能会成为一个问题。缓存也可能是一个问题。