【发布时间】:2015-12-08 12:44:45
【问题描述】:
我在尝试完成相当平庸的任务时遇到了麻烦。我需要从输入 txt 文件创建 nodejs 可读流。我需要对此流执行一些转换(为每一行创建 JSON 对象)。
问题是我希望这个流是不定式的:在读取最后一行之后,流应该从头开始。我的解决方案有效,但收到警告消息:
(node) 警告:检测到可能的 EventEmitter 内存泄漏。添加了 11 个排水监听器。使用emitter.setMaxListeners() 增加限制。
我希望找到简单的解决方案,而不是直接读取和缓冲文件。
//Transform stream object
var TransformStream = function () {
Transform.call(this, {objectMode: true});
};
util.inherits(TransformStream, Transform);
TransformStream.prototype._transform = onTransform;
TransformStream.prototype._flush = onEnd;
var ts = new TransformStream();
var infinStream = function () {
var r = fs.createReadStream(filePath);
r.pipe(split(), {end: false})
.pipe(ts, {end: false});
r.once('end', function () {
//console.log('\n\n\n\nRead file stream finished. Lines counted:\n\n\n\n' + detectionCounter);
r.removeAllListeners();
r.destroy();
infinStream();
});
return r;
};
infinStream();
return ts;
【问题讨论】:
-
如果你有一个不是不定式大的文件,那么总会有一个结束。但是你为什么想要一个循环。你想要返回的数据做什么?
-
当没有答案时,这意味着我完全错过了一些东西。我将设备输出保存在 txt 文件中。我想要的是模拟设备输出的服务器 - 意味着它将从文件中流式传输数据,直到中断。
-
为什么要使用循环文件流来模拟设备输出?设备输出也不是不定式大。我也认为你在这里遗漏了一些东西。我不明白你想做什么,但我很确定解决方案不是不定式大文件流。
-
我需要每天 24 小时运行的服务器,并且会一直模拟设备输出。无论设备输出有多大,我都需要使其不定式。我想到的最简单的解决方案是将导出不定式流的模块。我想知道它是否存在更智能的解决方案。
标签: javascript node.js stream