node.js - 使用异步在 Node.js 中批量处理并行 HTTP 请求

标签 node.js httprequest async.js batching

我的代码结构大致如下:

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 秒左右,我就会收到 ECONNREFUSEDECONNRESET 错误,我认为这是因为我的所有 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/

相关文章:

ios - POST w/JSON Body - Swift3 - 片段?

使用 Foreman 的 API 更新主机的 Python 脚本

node.js - 通过 nodejs 应用程序连接到 tomcat

linux - 无法制作 node.js ubuntu 13.10

javascript - jQuery 获取 HTTP URL 请求

javascript - 不知道如何异步

javascript - 在 Node 模块中使用 async - 如何返回结果?

javascript - async.js 从最后一个函数返回值

javascript - 使用 MongoDB 和 Nodejs 创建嵌套子文档/子元素

html - Nodejs 提供的 HTML 页面中静态资源的链接不起作用