ExpressJs HTTP Streaming 让我的磁盘空间用完了

ExpressJs HTTP Streaming make me run out of disk space

提问人:Tran Chien 提问时间:6/18/2022 更新时间:6/18/2022 访问量:57

问:

我的快递服务器

app.get('/data', (_, res) => {
    const interval = setInterval(
        () => res.write(`${Math.random().toString()}\n`),
        1000
    );
    res.on('close', () => {
        clearInterval(interval);
        res.end();
    });
});

我的客户端

const res = await fetch('/data')
const reader = res.body.getReader()
reader.read().then(data => {
    const { value, done} = data;
    console.log(value);
})

一切正常,数据每秒都在流式传输和记录。但是,每当我刷新页面或关闭页面时,服务器端就会开始以 100MB/秒的速度填满我的磁盘空间。

我最好的猜测是,一个随机数不能与 100MB 匹配。

JavaScript 节点 .js 快速 磁盘 HTTP 流

评论


答:

0赞 Heiko Theißen 6/18/2022 #1

客户端代码仅从服务器读取一个数据块,因此服务器端缓冲区每秒填满一次(尽管不是 100MB?如果将客户端代码替换为

const res = await fetch('/data');
const reader = res.body.getReader();
while (!await reader.read().then(function({value, done}) {
  console.log(value);
  return done;
}));

?

评论

0赞 Tran Chien 6/18/2022
我试过你的解决方案。问题仍然存在。我在 docker 容器内运行该应用程序。即使在我删除容器后,磁盘仍然每 3-4 秒倒计时 100MB/秒)。我放入一个控制台.log,并注意到服务器确实收到了“关闭”事件。无论如何,服务器旨在不断向客户端写入更新。
0赞 Tran Chien 6/18/2022 #2

我在不同的机器上再次尝试,我可以得出结论,造成这种情况的原因是 Google Cloud Shell 的错误。它与 Docker 或 ExpressJs 无关。

评论

0赞 Community 6/19/2022
您的答案可以通过额外的支持信息得到改进。请编辑以添加更多详细信息,例如引文或文档,以便其他人可以确认您的答案是正确的。您可以在帮助中心找到有关如何写出好答案的更多信息。