我的代码结构大致如下:
readLine.on('line', function (line) {
async.parallel([
function (callback) {
// HTTP request #1 sent with accompanied JSON, get JSON as result
},
function (callback) {
// HTTP request #2 sent with accompanied JSON, get JSON as result
}],
function (error, results) {
// write to local file
})
我使用逐行
模块实现了输入流。
我的问题是,一旦我的代码开始运行 30 秒左右,我就会收到 ECONNREFUSED
和 ECONNRESET
错误,我认为这是因为我的所有 TCP 连接都过载了(所有 HTTP 请求都会发送到本地主机服务器)。我必须读取的文本文件有大约 200,000 行,这绝对没有帮助。
有没有办法批量处理线路和 HTTP 请求,并等待所有请求完成并成功返回,这样我就不会重载 TCP 套接字?
预先感谢您的任何帮助和建议。
最佳答案
一个选项是使用 async.queue
,它具有可配置的并发性。
var queue = async.queue(function(task, queueCallback) {
async.parallel([
function (callback) {
// HTTP request #1 sent with accompanied JSON, get JSON as result
},
function (callback) {
// HTTP request #2 sent with accompanied JSON, get JSON as result
}],
function (error, results) {
// write to local file
...
// call the queue callback
queueCallback(error);
})
}, 10); // 10 concurrent 'tasks' max
readLine.on('line', function (line) {
queue.push({ line : line });
});
关于node.js - 使用异步在 Node.js 中批量处理并行 HTTP 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45212692/