3

我的代码结构大致如下:

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
    })

line-by-line我用模块实现了输入流。我的问题是,一旦我的代码开始运行 30 秒左右,就会ECONNREFUSED出现ECONNRESET错误,我认为这是因为我的所有 TCP 连接都超载(所有 HTTP 请求都转到 localhost 服务器)。我必须阅读的文本文件有大约 200,000 行,这绝对无济于事。

有什么方法可以批量处理线路和HTTP请求,等到所有请求都通过并成功返回,这样我的TCP套接字就不会超载了?
提前感谢您的任何帮助和建议。

4

1 回答 1

1

一个选项是使用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 });
});
于 2017-07-20T11:24:27.853 回答