7
我使用node.js使用http.get請求和async.eachLimit方法下載大量文件。多個http.get請求導致套接字掛起錯誤
當我增加5以上的異步方法的併發性,這個'套接字掛斷'錯誤很容易出現,我不明白爲什麼。
任何人都可以照亮爲什麼會發生這種情況?
這裏的錯誤接收
events.js:72
throw er; // Unhandled 'error' event
^
Error: socket hang up
at createHangUpError (http.js:1472:15)
at Socket.socketOnEnd [as onend] (http.js:1568:23)
at Socket.g (events.js:180:16)
at Socket.EventEmitter.emit (events.js:117:20)
at _stream_readable.js:920:16
at process._tickCallback (node.js:415:13)
,這裏是被一再呼籲與async.eachLimit方法
var urlPre = "http://api.steampowered.com/IEconItems_440/GetPlayerItems/v0001/?key=";
var urlSidPre = "&steamid=";
var urlInvSuf = "&inventory=yes";
var URL = urlPre+steam_API+urlSidPre+sid+urlInvSuf;
//log.info("Downloading "+ alias + "'s inventory");
http.get(URL, function (res) {
var body = '';
res.on('data', function (data) {
body+=data;
fs.appendFile(invLoc, data);
});
res.on('end', function() {
try {
inventory = JSON.parse(body);
//log.info(alias + "'s inventory downloaded");
} catch (e) {
fs.unlinkSync(invLoc);
log.error("parsing " + alias+"'s inventory");
loadInventory(sid, alias, invFolder, callback);
return;
}
callback(inventory, alias);
});
res.on('error', function (e, socket) {
log.error(alias + " inventory error")
})
})
'錯誤'偵聽器我已經沒有做同樣的事情嗎? – AustinGeorge
不。您已將ServerResponse定義爲錯誤偵聽器。但是錯誤來自ClientRequest(http.get)。 –
謝謝,這抓住了幾千個錯誤中的一個。 – AustinGeorge