Node.js,Express,MongoDB - 集群工作者崩溃

时间:2015-04-16 17:16:14

标签: node.js express

当我遇到快速路线时,我的问题是群集崩溃中的一名工作人员。

4名工人:

API started on port 8000
API started on port 8000
API started on port 8000
API started on port 8000

然后我浏览http://localhost:8000

worker 1 has died :(

工人死后,整个群集都没有反应。 当我只使用一个cpu时,它工作正常。

server.js

var cluster = require('cluster');


if(cluster.isMaster){

    var cpuCount = require('os').cpus().length;

    // Create a worker for each CPU
    for (var i = 0; i < cpuCount; i += 1) {
        cluster.fork();
    }

    cluster.on('exit', function(worker) {
        console.log('worker:' + worker.id + " is dead");
        cluster.fork();
    });

} else {
    var init = require('./config/init')();
    var config = require('./config/config');
    var mongoose = require('mongoose');
    var chalk = require('chalk');

    var db = mongoose.connect(config.db, function(err) {
        if (err) {
            console.error(chalk.red('Could not connect to MongoDB!'));
            console.log(chalk.red(err));
        }
    });

    var app = require('./config/express')(db);

    app.listen(config.port);

    require('./config/passport')();

    console.log('API started on port ' + config.port);   
}

1 个答案:

答案 0 :(得分:0)

您可能想尝试JXcore,它支持多任务处理(单个进程下的线程/实例)。由于这个原因,不再需要聚类。谁知道,也许这对你来说会更好。

所以让我们说,你只需要一个工人代码(我只是将其粘贴在这里而不做任何改动):

var init = require('./config/init')();
var config = require('./config/config');
var mongoose = require('mongoose');
var chalk = require('chalk');

var db = mongoose.connect(config.db, function(err) {
  if (err) {
    console.error(chalk.red('Could not connect to MongoDB!'));
    console.log(chalk.red(err));
  }
});

var app = require('./config/express')(db); 
app.listen(config.port);
require('./config/passport')();
console.log('API started on port ' + config.port);

然后用mt-keep参数运行它(意思是:“multithread-keepalive”):

$ jxcore mt-keep:4 worker.js

4的{​​{1}}个州号 - 请更改以适合您的平台。

请注意,我没有对其进行测试。我只是展示了多进程群集的替代方案。此外,根据实施情况,JXcore可能更高效。

有一篇为期一年的文章,强调了JXcore和Node.JS之间的性能差异:JXcore vs Vert.x vs Node.JS Cluster