node.js 程序因 writeStreams 过多而崩溃;其他选择?
node.js program crashes with too many writeStreams; other options?
我每分钟都有数据传入,我需要写入多个文件。我目前的解决方案是:
function writeData(data) {
for(let i = 0; i < data.length; i++) {
stream = fs.createWriteStream('myFile' + [i] + '.txt', {flags: 'a'});
stream.write(data[i] + '\n');
}
}
writeData()
每分钟调用一次。最终我的程序在一段时间后崩溃了。我不记得确切的错误,但它与太多 writeStreams/fds 或类似的东西有关。
看看我的代码,这个错误似乎是合理的,因为我每分钟都在创建几个新的 writeStreams。问题是,有没有办法只创建一次所有流并在需要时引用它们(通过 ID 或其他东西)?
预先感谢您的帮助。
您需要缓存每个流,并且只有在缓存中不存在时才创建一个。完成此操作的最简单方法是使用模块(充当单例)。下面的代码会让你走上正轨。
// Module file for writeStream cacheing
const streams = [];
export default function writeData(data) {
for (let i = 0; i < data.length; i++) {
if (!inCache(i)) {
addStream(fs.createWriteStream('myFile' + [i] + '.txt', {flags: 'a'}));
addErrorHandler(i);
}
streams[i].write(data[i] + '\n');
}
}
function inCache(idx) {
return streams[idx] && streams[idx].writeable;
}
function addStream(stream) {
streams.push(stream);
}
function addErrorHandler(idx) {
stream[idx].on('error', (err) => console.log('do something'));
}
我每分钟都有数据传入,我需要写入多个文件。我目前的解决方案是:
function writeData(data) {
for(let i = 0; i < data.length; i++) {
stream = fs.createWriteStream('myFile' + [i] + '.txt', {flags: 'a'});
stream.write(data[i] + '\n');
}
}
writeData()
每分钟调用一次。最终我的程序在一段时间后崩溃了。我不记得确切的错误,但它与太多 writeStreams/fds 或类似的东西有关。
看看我的代码,这个错误似乎是合理的,因为我每分钟都在创建几个新的 writeStreams。问题是,有没有办法只创建一次所有流并在需要时引用它们(通过 ID 或其他东西)?
预先感谢您的帮助。
您需要缓存每个流,并且只有在缓存中不存在时才创建一个。完成此操作的最简单方法是使用模块(充当单例)。下面的代码会让你走上正轨。
// Module file for writeStream cacheing
const streams = [];
export default function writeData(data) {
for (let i = 0; i < data.length; i++) {
if (!inCache(i)) {
addStream(fs.createWriteStream('myFile' + [i] + '.txt', {flags: 'a'}));
addErrorHandler(i);
}
streams[i].write(data[i] + '\n');
}
}
function inCache(idx) {
return streams[idx] && streams[idx].writeable;
}
function addStream(stream) {
streams.push(stream);
}
function addErrorHandler(idx) {
stream[idx].on('error', (err) => console.log('do something'));
}