Skip to content

Instantly share code, notes, and snippets.

@smagch
Created April 20, 2012 08:51
Show Gist options
  • Save smagch/2427191 to your computer and use it in GitHub Desktop.
Save smagch/2427191 to your computer and use it in GitHub Desktop.
node built-in cluster and http-proxy
/**
* Module dependencies.
*/
var express = require('express')
, routes = require('./routes')
, http = require('http')
, cluster = require('cluster')
, numCPUs = require('os').cpus().length
, argv = require('optimist').argv
;
var host = argv.host || 'localhost';
var port = argv.port || 3000;
var app = express();
app.configure(function(){
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.static(__dirname + '/public'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
});
app.configure('development', function(){
app.use(express.errorHandler());
});
app.get('/', routes.index);
var cluster = require('cluster');
if(cluster.isMaster) {
for (var i = 0; i < 4; i++) {
cluster.fork();
}
cluster.on('death', function(worker) {
console.log('worker ' + worker.pid + ' died');
});
} else {
http.createServer(app).listen(port, host);
console.log('app pid : ' + process.pid);
}
/**
* Module dependencies.
*/
var express = require('express')
, routes = require('./routes')
, http = require('http')
, argv = require('optimist').argv
;
var host = argv.host || 'localhost';
var port = argv.port || 3000;
var app = module.exports = express();
app.configure(function(){
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.static(__dirname + '/public'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
});
app.configure('development', function(){
app.use(express.errorHandler());
});
app.get('/', routes.index);
cluster = require('cluster');
if(cluster.isMaster) {
for (var i = 0; i < 4; i++) {
cluster.fork();
}
cluster.on('death', function(worker) {
console.log('worker ' + worker.pid + ' died');
});
} else {
http.createServer(app).listen(port, host);
console.log('proxy-app pid : ' + process.pid);
}
var express = require('express')
, routes = require('./routes')
, http = require('http')
, httpProxy = require('http-proxy')
, cluster = require('cluster')
, numCPUs = require('os').cpus().length
, cp = require('child_process')
;
var options = {
router: {
'localhost/foo': 'localhost:3002',
'localhost': 'localhost:3001'
}
}
if(cluster.isMaster) {
cp.fork(__dirname + '/app.js', ['--port=3001', '--host=localhost']);
cp.fork(__dirname + '/proxy/proxy-app.js', ['--port=3002', '--host=localhost']);
for (var i = 0; i < 2; i++) {
cluster.fork();
}
cluster.on('death', function(worker) {
console.log('worker ' + worker.pid + ' died');
});
} else {
var proxyServer = httpProxy.createServer(options);
proxyServer.listen(3000);
console.log('proxy worder pid : ' + process.pid);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment