← 中文资源

简体中文版本

带背压的流式响应

流式传输大响应,带背压和 content-type 头,内存高效文件服务。

阅读英文原文

示例说明

流式传输大响应,带背压和 content-type 头,内存高效文件服务。本示例属于文件上传场景,提供可直接复制使用的typescript代码片段,附带边界条件与使用注意事项。

技术要点

  • Readable.from 把异步迭代转为流
  • jsonStream 逐项 JSON 序列化加逗号
  • content-length 可选支持进度条

代码解读

上述代码实现了带背压的流式响应的核心逻辑。流式传输大响应,带背压和 content-type 头,内存高效文件服务。代码中包含输入校验、核心算法和结果返回三个部分。关键在于正确处理边界情况,例如空输入、非法参数和并发场景。Readable.from 把异步迭代转为流,jsonStream 逐项 JSON 序列化加逗号。这些设计确保代码在生产环境中的健壮性。

使用建议

在实际项目中使用本示例时,建议先理解带背压的流式响应的适用场景与限制条件。content-length 可选支持进度条。根据具体业务需求调整参数配置,并编写单元测试覆盖正常路径与边界情况。本代码片段可直接集成到现有项目中,或作为参考实现自行扩展。

代码示例

import{Readable}from'node:stream';export function streamingResponse(source:Readable,{contentType='application/octet-stream',contentLength}:{contentType?:string;contentLength?:number}={}){const headers:Record<string,string>={'content-type':contentType,'cache-control':'no-cache'};if(contentLength)headers['content-length']=String(contentLength);return{headers,body:source};}export function jsonStream(items:AsyncIterable<unknown>){const readable=Readable.from((async function*(){yield'[';let first=true;for await(const item of items){if(!first)yield',';yield JSON.stringify(item);first=false;}yield']';})());return streamingResponse(readable,{contentType:'application/json'});}