2013-11-26 2 views
0

У меня есть очень простой код, как это:node.js HTTP запрос блокировки после 5 запросов

var http = require('http'); 

var options = { 
    hostname: 'google.com', 
    port: 80, 
    path: '/' 
}; 

function makeRequest() { 
    http.get(options, function(res) { 
     console.log('Got response code: ', res.statusCode); 
     process.nextTick(makeRequest); 
    }).on('error', function(err) { 
      console.error('Got error: ', err); 
      throw err; 
     }); 
} 

makeRequest(); 

и после 5 запросов, он блокирует и перестает работать. Пример вывода:

Got response code: 200 
Got response code: 200 
Got response code: 200 
Got response code: 200 
Got response code: 200 
Got error: { [Error: connect ECONNREFUSED] 
    code: 'ECONNREFUSED', 
    errno: 'ECONNREFUSED', 
    syscall: 'connect' } 
+0

Как часто вы снимаете 'google.com'? – shennan

+0

Ничего общего с google.com, это происходит на всех серверах - включая мой localhost – Heptic

+2

http://nodejs.org/api/http.html#http_agent_maxsockets (возможно, с помощью 'agent: false') – Wrikken

ответ

1

Отъезд в hyperquest README, который объясняет, что именно здесь происходит, почему @substack ненавидит его, и как hyperquest можно избежать.

0

По клиентским подключениям по умолчанию объединяется и имеет 2 мин период ожидание и по умолчанию максимального размера пула 5.

Если вы не собираетесь повторно использовать инстанс агента, вы должны позвонить уничтожить() метод после его использования и не допускать простоя в пуле. Пример:

var req = http.request({path: "/", host: "google.com",method: "HEAD"}) 
req.end(); 
req.on("response",function(res) { 
    //do something 
    // .... 
    req.destroy();   
    //do other things 
}); 
Смежные вопросы