Express,Nodejs-如何从客户端检测暂停/慢速互联网连接



我使用express通过res.writeres.end方法将处理后的数据下载到客户端。

到目前为止,一切都很好,预计最终用户的互联网连接速度非常慢,或者在处理后的数据仍在流式传输时暂停下载,这会导致一段时间后内存泄漏。

示例情况:

假设10GB数据需要发送给用户(通过使用chunk+req.write(。用户决定暂停下载(在浏览器中(或只是互联网连接缓慢,文件仍在服务器端进行流式传输,但不是发送给用户,而是存储在内存中,直到用户再次恢复下载。导致内存泄漏。

如果用户决定暂停下载文件,如何导致内存泄漏问题的伪代码示例:

app.get("/download/file", (req, res) => {
res.set({
"Content-Type": "any-mime-type",
"Content-Disposition": `attachment;filename=example-file.dat`,
"Content-Length": 9999999
})
const recursive = ()=>{
const data_chunk = processing_data(req, ..., options);
req.write(data_chunk);
if (data_transfer_completed){ //if the requirement has been fulfilled
res.end();
}else{
setTimeout(recursive, 50);
}
}
recursive();
})

现在的问题是,有没有一种方法可以从req.write中获得仍然需要发送的内容大小?因此,如果内容仍然需要发送给用户,我可以构建一个功能作为示例。它超过50MB?然后放慢速度/暂停功能。

我原以为req.on("暂停",function(({}(会起作用,但我认为这只会在使用req.pause((时触发;暂停";功能(du'h!(。

有什么解决办法吗?

非常感谢,

Chinafreak

好吧,我用解决了这个问题

req.write(<data>, function(){
//Data were sent / flushed
})

给我们更多的内存使用控制!这解决了问题!

最新更新