Я транслирую HTML 5 видео с помощью Express с помощью fs.createReadStream(path).pipe(res);
, что в конечном итоге вызывает ошибку 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);
}
});
, что ОС вы работаете на? Mac? Linux? etc ... –
@PhilPoore Windows, неуверенный, если это происходит в другой ОС. – user2248702