自昨天以来,我一直在努力在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张图像。这也可能是一些异步问题,但现在我只是猜测。
谁能解释我为什么会这样以及如何正确处理呢?任何帮助将不胜感激。