【发布时间】:2017-01-07 12:59:04
【问题描述】:
我正在使用 fs.createReadStream(path).pipe(res); 使用 Express 流式传输 HTML 5 视频,如果我刷新页面太多次(以千计),最终会导致错误 Error: EMFILE: too many open files。我认为我需要执行某种清理并关闭文件以防止这种情况发生,但我不确定需要做什么。
每当用户寻找客户端未加载的视频部分时,我都会创建一个读取流,这会使此问题在几分钟内发生。任务管理器显示同一个文件打开了数百次,因此它似乎永远不会关闭。
流函数的相关部分:
fs.stat(path, function(err, stats) {
var size = stats.size;
var range = req.headers.range;
if (range) {
var parts = range.replace(/bytes=/, '').split('-');
var start = parseInt(parts[0]);
var end = parts[1] ? parseInt(parts[1]) : size - 1;
var chunksize = (end - start) + 1;
res.writeHead(206, {
'Content-Range': 'bytes ' + start + '-' + end + '/' + size,
'Accept-Ranges': 'bytes',
'Content-Length': chunksize,
'Content-Type': 'video/mp4'
});
fs.createReadStream(path, {start: start, end: end}).pipe(res);
} else {
res.writeHead(200, {
'Content-Length': size,
'Accept-Ranges': 'bytes',
'Content-Type': 'video/mp4'
});
fs.createReadStream(path).pipe(res);
}
});
【问题讨论】:
-
你在什么操作系统上运行?苹果? Linux?等等……
-
@PhilPoore Windows,不确定这是否发生在其他操作系统上。
标签: node.js express stream video-streaming html5-video