Node.js-套接字在HTTP请求上挂起

时间:2018-06-27 11:52:36

标签: javascript node.js

自昨天以来,我一直在努力在node.js(javascript)的客户端上出现“套接字挂起错误”。我有一个包含约1500个图像URL的数组,需要将其下载到目录中。数组中的所有图像URL都链接到.png格式的图像。

我首先创建一个通过URL下载图像的函数。该函数如下所示:

downloadImageByUrl = (url, filename) => {
    var client = http;
    if (url.toString().indexOf("https") === 0){
      client = https;
     }
    client.request(url, (response) => {
      var data = new Stream();
      response.on('data', (chunk) => {
         data.push(chunk);
      });
      response.on('end', () => {
         fs.writeFileSync(filename, data.read());
      });
   }).end();
};

接下来,我遍历包含图像网址的数组并调用上述函数:

downloadAllImages = (arrayThatContainsImageUrls) => {
  const imageDestination = __dirname + '/img/';
  for (let i = 0; i < arrayThatContainsImageUrls.length; i++) {
    downloadImageByUrl(arrayThatContainsImageUrls[i], iconDestination + i + '.png');
  }
}

一切正常,但是当下载大约200-300张图像时,控制台会抛出套接字挂起错误:

{ Error: socket hang up
    at TLSSocket.onHangUp (_tls_wrap.js:1140:19)
    at Object.onceWrapper (events.js:314:30)
    at emitNone (events.js:110:20)
    at TLSSocket.emit (events.js:207:7)
    at endReadableNT (_stream_readable.js:1059:12)
    at _combinedTickCallback (internal/process/next_tick.js:138:11)
    at process._tickCallback (internal/process/next_tick.js:180:9)
  code: 'ECONNRESET',
  path: null,
  host: 's1.example.com',
  port: 443,
  localAddress: undefined }

我认为这与一次发送的请求数量有关,因为当我只想下载时,它可以正常工作,可以说10张图像。这也可能是一些异步问题,但现在我只是猜测。

谁能解释我为什么会这样以及如何正确处理呢?任何帮助将不胜感激。

0 个答案:

没有答案