You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从Node.js API分步返回响应至客户端?

Node.js API实时返回多步骤执行结果方案

要实现API执行多任务步骤时实时返回每个步骤的结果,最适合的方案是使用Server-Sent Events (SSE)——这是一种基于HTTP的单向实时通信机制,服务器可以主动向客户端推送数据,无需客户端反复请求。

后端实现(Express为例)

创建支持SSE的接口,通过保持HTTP长连接逐个推送步骤结果:

const express = require('express');
const app = express();

app.get('/api/doStepComplete', async (req, res) => {
  // 设置SSE专属响应头
  res.setHeader('Content-Type', 'text/event-stream');
  res.setHeader('Cache-Control', 'no-cache');
  res.setHeader('Connection', 'keep-alive');
  res.flushHeaders(); // 立即发送头信息建立长连接

  // 模拟多步骤任务流程
  const steps = [
    '初始化任务环境',
    '读取源数据',
    '执行数据处理逻辑',
    '生成输出结果',
    '清理临时资源'
  ];

  for (const step of steps) {
    // 模拟步骤执行耗时(实际场景替换为真实业务逻辑)
    await new Promise(resolve => setTimeout(resolve, 1200));
    
    // 向客户端推送当前步骤的执行结果
    res.write(`data: ${JSON.stringify({ stepName: step, status: 'completed' })}\n\n`);
  }

  // 推送任务完成标识,通知客户端结束监听
  res.write(`event: finished\ndata: ${JSON.stringify({ message: '所有步骤已执行完毕' })}\n\n`);
  res.end(); // 主动关闭长连接
});

app.listen(3000, () => {
  console.log('Server running on http://localhost:3000');
});

前端实现

客户端通过EventSource接口连接SSE服务,实时接收并处理步骤结果:

const sseConnection = new EventSource('http://localhost:3000/api/doStepComplete');

// 监听普通步骤推送
sseConnection.onmessage = (event) => {
  const result = JSON.parse(event.data);
  console.log(`已完成步骤:${result.stepName}`);
  // 此处可直接更新页面UI,展示实时进度
};

// 监听任务完成的专属事件
sseConnection.addEventListener('finished', (event) => {
  const finishInfo = JSON.parse(event.data);
  console.log(finishInfo.message);
  sseConnection.close(); // 任务结束后主动关闭连接
});

// 处理连接异常
sseConnection.onerror = (error) => {
  console.error('SSE连接异常:', error);
  sseConnection.close();
};

核心注意事项

  • SSE依赖HTTP长连接,必须设置Cache-Control: no-cache防止中间代理缓存推送内容。
  • 每条推送数据必须以\n\n结尾,这是SSE的强制格式要求。
  • 若步骤包含异步操作(如数据库查询、第三方API调用),直接用await处理即可,无需额外回调嵌套。
  • 仅需服务器单向推送时,SSE比WebSocket更轻量;若需要双向通信场景,再考虑WebSocket方案。

内容的提问来源于stack exchange,提问作者Abul Hasan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 22:25:41