From 608818e67063c4a62e42a8a34216ffc09ac41242 Mon Sep 17 00:00:00 2001 From: Zach Pendleton Date: Wed, 1 Oct 2014 16:30:42 -0600 Subject: [PATCH] add clustering support if passed a cluster count through the CLUSTER environment variable (e.g. CLUSTER=4 ./start.js), the server now runs n processes on PORT, PORT+1, PORT+2, PORT+n. --- server.coffee | 8 +++++--- start.js | 17 +++++++++++++++-- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/server.coffee b/server.coffee index 7cb52a3..e66dab9 100755 --- a/server.coffee +++ b/server.coffee @@ -4,6 +4,7 @@ Q = require 'q' _ = require 'underscore' express = require 'express' config = require 'config' +cluster = require 'cluster' configWrapper = require './lib/configWrapper' load = require './lib/load' @@ -22,13 +23,13 @@ loadConfig = (logger) -> load(MODULES.config, {config, logger}) else configWrapper(config) - + setCORSHeaders = (req, res, next) -> res.setHeader 'Access-Control-Allow-Origin', '*' res.setHeader 'Access-Control-Allow-Methods', 'POST' res.setHeader 'Access-Control-Max-Age', '604800' res.setHeader 'Access-Control-Allow-Credentials', 'true' - + next() parser = (req, res, next) -> @@ -53,7 +54,7 @@ parser = (req, res, next) -> loadApp = (logger, loadedConfig) -> app = express() - + APP_ROOT = process.env.APP_ROOT ? loadedConfig.get('server.appRoot').get() ? '' moduleGroups = {} @@ -109,6 +110,7 @@ loadApp = (logger, loadedConfig) -> res.send('OK\n') port = process.env.PORT ? loadedConfig.get('server.port').get() ? 5000 + port = (port + cluster.worker.id - 1) if process.env.CLUSTER && cluster.isWorker app.listen(port) logger.log('Server listening on port %d in %s mode', port, app.settings.env) diff --git a/start.js b/start.js index e79ae8a..adf2071 100755 --- a/start.js +++ b/start.js @@ -1,4 +1,17 @@ #!/usr/bin/env node -require("coffee-script"); -require("./server.coffee"); +var cluster = require('cluster'); + +if (process.env.CLUSTER) { + if (cluster.isMaster) { + for (var i=0; i < parseInt(process.env.CLUSTER); i++) { + cluster.fork(); + } + } else { + require("coffee-script"); + require("./server.coffee"); + } +} else { + require("coffee-script"); + require("./server.coffee"); +}