fix: 修复流式响应缓冲问题,实现真正的实时流传输

- 配置 compression 中间件排除 SSE 流式响应,避免压缩导致的缓冲
- 添加 X-Accel-Buffering: no 响应头,禁用 Nginx 等代理的缓冲
- 使用 res.flushHeaders() 立即发送响应头
- 禁用 Nagle 算法确保数据立即发送
- 在每次写入流数据后调用 flush() 确保实时传输

这些修复确保了流式请求能够正常显示打字机效果,数据从上游 Claude API 接收后能够立即转发给客户端。

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
shaw
2025-07-23 15:56:27 +08:00
parent 2f4730baba
commit 1e372dd365
3 changed files with 79 additions and 39 deletions

View File

@@ -45,6 +45,15 @@ async function handleMessagesRequest(req, res) {
res.setHeader('Cache-Control', 'no-cache');
res.setHeader('Connection', 'keep-alive');
res.setHeader('Access-Control-Allow-Origin', '*');
res.setHeader('X-Accel-Buffering', 'no'); // 禁用 Nginx 缓冲
// 立即发送响应头,防止缓冲
res.flushHeaders();
// 禁用 Nagle 算法,确保数据立即发送
if (res.socket && res.socket.setNoDelay) {
res.socket.setNoDelay(true);
}
// 流式响应不需要额外处理,中间件已经设置了监听器