mirror of
https://github.com/mgerb/mywebsite
synced 2026-01-12 18:52:50 +00:00
48 lines
1.1 KiB
JavaScript
48 lines
1.1 KiB
JavaScript
var cluster = require('cluster')
|
|
, http = require('http')
|
|
|
|
module.exports = {
|
|
run: run
|
|
};
|
|
|
|
function run(filename, port) {
|
|
if (cluster.isMaster) {
|
|
console.log('Master pid', process.pid);
|
|
startWorker();
|
|
} else {
|
|
var server = requireServer(filename);
|
|
server.listen(port, function() {
|
|
console.log('%d listening. Go to: http://localhost:%d/', process.pid, port);
|
|
});
|
|
}
|
|
}
|
|
|
|
function startWorker() {
|
|
var worker = cluster.fork();
|
|
worker.once('disconnect', function () {
|
|
worker.process.kill();
|
|
});
|
|
worker.on('message', function(message) {
|
|
if (message.type === 'reload') {
|
|
if (worker.disconnecting) return;
|
|
console.log('Killing %d', worker.process.pid);
|
|
worker.process.kill();
|
|
worker.disconnecting = true;
|
|
startWorker();
|
|
}
|
|
});
|
|
}
|
|
|
|
function requireServer(filename) {
|
|
try {
|
|
var server = require(filename);
|
|
} catch (e) {
|
|
console.error('Error requiring server module from `%s`', filename);
|
|
throw e;
|
|
}
|
|
if (!(server instanceof http.Server)) {
|
|
throw new Error('`' + filename + '` does not export a valid `http.Server`');
|
|
}
|
|
return server;
|
|
}
|