当我遇到快速路线时,我的问题是群集崩溃中的一名工作人员。
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);
}
答案 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。