Node.js Readline接口“暂停”事件不会暂停inputstream
我期望下面的代码创build一个带有可读stream的文件,其中包含大约1000个URL的文件,从inputstream开始stream式处理(logging一行到控制台),然后暂停:
var readline = require('readline'); var fs = require('fs'); var rlinterface = readline.createInterface({ input: fs.createReadStream('urls.txt'), output: null, terminal: false }); rlinterface.on('pause', function() { console.log('Readline paused.'); }); rlinterface.on('line', function(line){ console.log(line); rlinterface.pause(); });
pause
事件的监听者通知我应该暂停stream,但inputstream中的文件中的所有行都logging到控制台,这表明stream不会暂停。 即使stream在第一行之后没有立即暂停(可能需要在缓冲区中捕获一些额外的行),我并不希望来自inputstream的文件中的所有行在“暂停'。 发生什么了?
可能发生的情况是,整个文件正在被一次读入,在你pause()
,没有什么可读的了。 具体来说, highWaterMark
的默认highWaterMark
是64KB ,所以可读stream在第一次读取时可以轻松地使用整个17KB文件,因为它试图将内部缓冲区保持为highWaterMark
。