66 lines
1.4 KiB
JavaScript
66 lines
1.4 KiB
JavaScript
|
|
/**
|
|
* Module dependencies.
|
|
*/
|
|
|
|
var cluster = require('../')
|
|
, http = require('http')
|
|
, fs = require('fs');
|
|
|
|
require('./common');
|
|
|
|
var server = http.createServer(function(req, res){
|
|
setTimeout(function(){
|
|
res.writeHead(200);
|
|
res.end('Hello World');
|
|
}, 1000);
|
|
});
|
|
|
|
cluster = cluster(server)
|
|
.set('workers', 2)
|
|
.use(cluster.pidfiles())
|
|
.listen(3002);
|
|
|
|
var a, b
|
|
, options = { host: 'localhost', port: 3002 };
|
|
|
|
function getPID(name) {
|
|
var pid = fs.readFileSync(__dirname + '/pids/' + name, 'ascii');
|
|
return parseInt(pid, 10);
|
|
}
|
|
|
|
function movePID(name) {
|
|
var pid = getPID(name);
|
|
fs.writeFileSync(__dirname + '/pids/old.' + name, pid.toString(), 'ascii');
|
|
}
|
|
|
|
if (cluster.isChild) {
|
|
cluster.on('restart', function(){
|
|
http.get(options, function(res){
|
|
res.statusCode.should.equal(200);
|
|
var a = getPID('old.worker.0.pid')
|
|
, b = getPID('old.worker.1.pid');
|
|
a.should.not.equal(getPID('worker.0.pid'));
|
|
b.should.not.equal(getPID('worker.1.pid'));
|
|
cluster.close();
|
|
});
|
|
});
|
|
} else {
|
|
var pending = 2;
|
|
cluster.on('worker pidfile', function(){
|
|
--pending || (function(){
|
|
movePID('worker.0.pid')
|
|
movePID('worker.1.pid');
|
|
|
|
// issue some requests
|
|
var n = 20
|
|
, pending = n;
|
|
while (n--) {
|
|
http.get(options, function(res){
|
|
res.statusCode.should.equal(200);
|
|
--pending || cluster.restart();
|
|
});
|
|
}
|
|
})();
|
|
});
|
|
} |