繁体   English   中英

多个http.get请求的套接字挂断错误

[英]Socket hang up error with multiple http.get requests

我正在使用node.js使用http.get请求和async.eachLimit方法下载大量文件。

当我将异步方法的并发性增加到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")
            })
        })

我认为你的问题与这些人的问题是一样的:

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

尝试向套接字的error event添加侦听器

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM