提问人:Tran Chien 提问时间:6/18/2022 更新时间:6/18/2022 访问量:57
ExpressJs HTTP Streaming 让我的磁盘空间用完了
ExpressJs HTTP Streaming make me run out of disk space
问:
我的快递服务器
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 匹配。
答:
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 无关。
评论