[Node.js] http client がリクエスト6回目以後ハングする
Node.js v0.10.x の http.globalAgent は、keepAlive = true, maxSockets = 5 になっているので、同一 Origin に対して5コネクション全てを腐らせるとハングします。 具体的には 公式ドキュメントの http.get のサンプルコード そのままで、複数回のリクエストを行うようにすると6回目以降必ずハングします。 var http = require('http'); setInterval(function () { http.get("http://www.google.com/index.html", function(res) { console.log("Got response: " + res.statusCode); // res.resume(); すれば OK }).on('error', function(e) { console.log("Got error: " + e.message); }); }, 1000); この事情に関しては、 Class: http.ClientRequest の章に丁寧に記述されているとおり、コールバック関数で受ける res は paused readable stream で、on data で内容を読むか、resume で捨てるかどちらかを必ず行う必要があります。 この状況の詳細なログを見るには、以下のように環境変数 NODE_DEBUG に http を入れるとデバッグログが出力されます。 $ node --version v0.10.39 $ NODE_DEBUG=http node foobar.js # 正しい場合の出力 HTTP: outgoing message end. HTTP: AGENT incoming response! HTTP: AGENT isHeadResponse false Got response: 302 HTTP: AGENT socket keep-alive HTTP: outgoing message e