diff --git a/bws.js b/bws.js index 51471e5..b3914d3 100755 --- a/bws.js +++ b/bws.js @@ -6,13 +6,36 @@ var config = require('./config'); var port = process.env.BWS_PORT || config.port || 3232; -var app = ExpressApp.start(config); -//app.listen(port); +var cluster = require('cluster'); +var http = require('http'); +var numCPUs = require('os').cpus().length; -var server = require('http').Server(app); -var ws = WsApp.start(server, config); +var startOne = function() { + var app = ExpressApp.start(config); + //app.listen(port); + var server = require('http').Server(app); + var ws = WsApp.start(server, config); + server.listen(port); + console.log('Bitcore Wallet Service running on port ' + port); +}; -server.listen(port); +if (!config.cluster) { + startOne(); +} else { + if (!config.storageOpts.multiLevel || !config.lockOpts.lockerServer) + throw 'When running in cluster mode, multilevel and locker server need to be configured'; -console.log('Bitcore Wallet Service running on port ' + port); + var clusterInstances = config.clusterInstances || numCpus; + + if (cluster.isMaster) { + for (var i = 0; i < clusterInstances; i++) { + cluster.fork(); + } + cluster.on('exit', function(worker, code, signal) { + console.log('worker ' + worker.process.pid + ' died'); + }); + } else { + startOne(); + } +} diff --git a/config.js b/config.js index f58e934..f0a242e 100644 --- a/config.js +++ b/config.js @@ -2,19 +2,23 @@ var config = { basePath: '/bws/api', disableLogs: false, port: 3232, + // Uncomment to make BWS a forking server + cluster: true, + // Uncomment to use the nr of availalbe CPUs + clusterInstances: 4, storageOpts: { - dbPath: './db', - // multiLevel: { - // host: 'localhost', - // port: 3230, - // }, + // dbPath: './db', + multiLevel: { + host: 'localhost', + port: 3230, + }, }, lockOpts: { // To use locker-server, uncomment this: - // lockerServer: { - // host: 'localhost', - // port: 3231, - // }, + lockerServer: { + host: 'localhost', + port: 3231, + }, }, blockchainExplorerOpts: { livenet: {