node.js如何使用背压处理快速生产者和慢速消费者
我是node.js的新手,不了解有关流的文档。希望得到一些提示 我正在读取一个非常大的文件行,然后为每一行调用一个异步网络api 显然,本地文件的读取速度远远快于异步调用的完成速度:node.js如何使用背压处理快速生产者和慢速消费者,node.js,node-streams,backpressure,Node.js,Node Streams,Backpressure,我是node.js的新手,不了解有关流的文档。希望得到一些提示 我正在读取一个非常大的文件行,然后为每一行调用一个异步网络api 显然,本地文件的读取速度远远快于异步调用的完成速度: var lineReader = require('readline').createInterface({ input: require('fs').createReadStream(program.input) }); lineReader.on('line', function (line) {
var lineReader = require('readline').createInterface({
input: require('fs').createReadStream(program.input)
});
lineReader.on('line', function (line) {
client.execute(query, [line], function(err, result) {
// needs to pressure the line reader here
var myJSON = JSON.stringify(result);
console.log("line=%s json=%s",myJSON);
});
});
在“执行”方法中添加背压的方法是什么?解决方案是将异步行为包装到流写入器中,并从写入器中限制异步读取器:
val count = 0;
var writable = new stream.Writable({
write: function (line, encoding, next) {
count++;
if (count < concurrent) {
next();
}
asyncFunctionToCall(...) {
// completion callback
// reduce the count and release back pressure
count--;
next();
...
}
});
var stream = fs.createReadStream(program.input, {encoding: 'utf8'});
stream = byline.createStream(stream);
stream.pipe(writable);
val计数=0;
var writeable=新流。可写({
写入:函数(行、编码、下一步){
计数++;
如果(计数<并发){
next();
}
异步函数调用(…){
//完成回调
//减少计数并释放背压
计数--;
next();
...
}
});
var stream=fs.createReadStream(program.input,{encoding:'utf8'});
stream=byline.createStream(stream);
stream.pipe(可写);
你能简单地解释一下你的问题吗?你如何在这个异步调用上创建一个流呢?OK,所以你应该使用promise或async Wait来解决这个问题,同步读取或推送数组中的数据,然后同步执行数组。我想我需要创建一个流。Writable nodejs文档中有一个关于嘿,这是如何限制读卡器的?是否有一个返回false;
缺失,或者它应该是这样的?