|
// Load modules |
|
|
|
var Url = require('url'); |
|
var Http = require('http'); |
|
|
|
|
|
var ignore = function () { }; |
|
|
|
|
|
var request = function (method, url, options, callback) { |
|
|
|
var uri = Url.parse(url); |
|
var timeoutId; |
|
uri.method = method.toUpperCase(); |
|
uri.headers = options.headers; |
|
|
|
var req = Http.request(uri); |
|
|
|
// Register handlers |
|
|
|
var isFinished = false; |
|
var finish = function (err, res) { |
|
if (res) { |
|
res.destroy(); |
|
} |
|
|
|
req.abort(); |
|
|
|
if (!isFinished) { |
|
isFinished = true; |
|
|
|
req.removeAllListeners(); |
|
req.on('error', ignore); |
|
clearTimeout(timeoutId); |
|
|
|
return callback(err, res); |
|
} |
|
}; |
|
|
|
req.once('error', function (err) { |
|
|
|
return finish(err); |
|
}); |
|
|
|
req.once('response', function (res) { |
|
|
|
return finish(null, res); |
|
}); |
|
|
|
req.write(options.payload); |
|
|
|
timeoutId = setTimeout(function () { |
|
|
|
return finish(new Error('Client request timeout')); |
|
}, 60000); |
|
|
|
req.end(); |
|
}; |
|
|
|
|
|
var envelope = { |
|
a: 1, |
|
b: 'asd', |
|
c: { |
|
d: 123, |
|
e: 'asd' |
|
} |
|
}; |
|
|
|
var pending = 0; |
|
|
|
var send = function () { |
|
|
|
var options = { |
|
headers: { |
|
'content-type': 'application/json' |
|
}, |
|
payload: JSON.stringify(envelope) |
|
}; |
|
|
|
++pending; |
|
request('post', 'http://localhost:8000/', options, function (err, res) { |
|
|
|
--pending; |
|
}); |
|
}; |
|
|
|
|
|
setInterval(function () { |
|
for (var i = 0; i < 400; ++i) { |
|
send(); |
|
} |
|
}, 1000); |
|
|
|
|
|
var max = 0; |
|
|
|
setInterval(gc, 500); |
|
|
|
setInterval(function () { |
|
var stats = process.memoryUsage(); |
|
if (stats.rss > max) { |
|
max = stats.rss; |
|
console.log('ZOMG NEW RSS', max); |
|
} |
|
}, 1000); |
|
|
|
setInterval(function () { |
|
var stats = process.memoryUsage(); |
|
console.log(stats.rss, stats.heapTotal, stats.heapUsed, pending); |
|
}, 9997); |
This comment has been minimized.
tjfontaine commentedNov 10, 2013
15150 times
MakeCallback
was called without aHandleScope
fromOnClose