获取大量图像的宽度会导致Node.js中出现ENOTFOUND

时间:2017-05-31 17:14:55

标签: node.js http

我有几个图像列表来源(闪烁,图像存储在s3,imgur等)

我想得到这些图像的尺寸。

我使用节点和https://github.com/nodeca/probe-image-size遍历每个网址并使用它来获取图片的宽度,并通过以下代码计算一定宽度的图片数量

    probes = [];

    _.forEach(image_urls, url => {
      probes.push(probe(url));
    });
    results = await Promise.all(probes);
     _.forEach(results, result_of_image => {
      width = parseInt(result_of_image.width / 10) * 10;
      if (!widthes[width]) {
       widthes[width] = 1;
      } else {
       widthes[width]++;
      }
     });

即使所有网址都可以访问,我有时会得到getaddrinfo ENOTFOUND堆栈

at ClientRequest.req.once.err (/image_script/node_modules/got/index.js:73:21)
at Object.onceWrapper (events.js:293:19)
at emitOne (events.js:101:20)
at ClientRequest.emit (events.js:191:7)
at TLSSocket.socketErrorListener (_http_client.js:358:9)
at emitOne (events.js:96:13)
at TLSSocket.emit (events.js:191:7)
at connectErrorNT (net.js:1031:8)
at _combinedTickCallback (internal/process/next_tick.js:80:11)
at process._tickDomainCallback (internal/process/next_tick.js:128:9)

我怀疑因为url列表非常大(成千上万)节点只占用系统的所有资源而且事情就停止了正常工作(这是猜测)

有没有更好的方法来做到这一点?或者为节点提供一些连接池?

0 个答案:

没有答案