在客户端连接关闭时中止ReadStream



我试图发送一个(巨大的)文件,每秒传递的数据量有限(使用TooTallNate/node through):

var fs = require('fs');
var Throttle = require('throttle');
var throttle = new Throttle(64);
throttle.on('data', function(data){
    console.log('send', data.length);
    res.write(data);
});
throttle.on('end', function() {
    console.log('error',arguments);
    res.end();
});
var stream = fs.createReadStream(filePath).pipe(throttle);

如果我在客户端浏览器上取消下载,流将继续,直到它完全传输
我还用npm节点节流流测试了上面的场景,同样的行为。

如果浏览器关闭了他的请求,如何取消流


编辑:

我可以使用获得连接close事件

req.connection.on('close',function(){});

stream既没有destroy,也没有endstop属性,我可以用它来阻止stream的进一步读取。

我确实提供了属性pauseDoc,但我宁愿停止节点读取整个文件,也不愿停止接收内容(如文档中所述)。

我最终使用了以下解决方法:

var aborted = false;
stream.on('data', function(chunk){
    if(aborted) return res.end();
    // stream contents
});
req.connection.on('close',function(){
    aborted = true;
    res.end();
});

如上所述,这不是一个很好的解决方案,但它确实有效
任何其他解决方案都将不胜感激!

相关内容

  • 没有找到相关文章

最新更新