2014-02-22 44 views
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") 
      }) 
     }) 

回答

7

我觉得你的问题的功能是一样的,这些人的:

https://github.com/ether/etherpad-lite/issues/1541

尝试添加侦听器t o插座的error event

http.get(...) 
.on('error', function(e) { 
    console.log("Got error: " + e.message); 
}); 
+0

'错误'侦听器我已经没有做同样的事情吗? – AustinGeorge

+0

不。您已将ServerResponse定义为错误侦听器。但是错误来自ClientRequest(http.get)。 –

+0

谢谢,这抓住了几千个错误中的一个。 – AustinGeorge