如何解决Express,Nodejs-如何从客户端检测暂停/缓慢的互联网连接?
我正在使用express通过res.write
和res.end
方法将处理后的数据下载到客户端。
到目前为止,一切工作都很好,希望最终用户的互联网连接速度很慢或正在处理的数据仍在流传输时暂停下载,这会在一段时间后导致内存泄漏。
一种示例情况:
假设需要向用户发送10GB数据(通过使用块+ 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(“ pause”,function(){})可以工作,但是我认为这仅在使用req.pause()时触发。但这又不是解决方案,因为缓慢的互联网连接不会触发“暂停”功能(杜!)。
有什么解决办法吗?
非常感谢,
Chinafreak
解决方法
好吧,我知道了
req.write(<data>,function(){
//Data were sent / flushed
})
给我们更多的内存使用控制权!这样就解决了问题!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。