我试图创建工人,它工作正常。它有四个内核,多次尝试时,它只显示来自一名工作人员的消息。节点js集群 - 它是如何工作的
var app = express();
app.use(express.static('public'));
app.use(bodyParser.urlencoded({ extended: false }));
if (cluster.isMaster) {
var cpuCount = os.cpus().length ;
console.log("No. of cpus:", cpuCount);
for(var i = 0; i < cpuCount; i++) cluster.fork();
cluster.on('listening', function(worker, address) {
console.log('woker id:' + worker.id +' is now listening on port:' + address.port);
});
} else {
console.log("i'm a worker.. ... lets proceed");
var server = app.listen(8082, function(req, res) {
var host = server.address().address;
var port = server.address().port;
request(i18n.__('url.config'), function(error, response, body){
if (!error && response.statusCode == 200) {
} else {
console.log("Config error",error);
}
});
}); // child process
}// else
//Listen for dying workers
cluster.on('exit', function (worker) {
// Bring that ... ..er back
console.log('Worker %d died :', worker.id);
cluster.fork();
});
cluster.on('online', function (worker) {
// worker is alive
console.log('Worker %d is alive :', worker.id);
});
app.get('/hey', function(req, res){
console.log('Worker %d running!', cluster.worker.id);
res.send('Hello World from worker ' + cluster.worker.id);
});
后来我修改了代码来实例化并在worker(else循环)中创建表达对象的创建。输出是一样的。
if (cluster.isMaster) {
var cpuCount = os.cpus().length ;
console.log("No. of cpus:", cpuCount);
for(var i = 0; i < cpuCount; i++) cluster.fork();
cluster.on('listening', function(worker, address) {
console.log('woker id:' + worker.id +' is now listening on port:' + address.port);
});
} else {
var app = express();
console.log("i'm a worker.. ... lets proceed");
var server = app.listen(8082, function(req, res) {
var host = server.address().address;
var port = server.address().port;
request(i18n.__('url.config'), function(error, response, body){
if (!error && response.statusCode == 200) {
} else {
console.log("Config error",error);
}
});
app.get('/hey', function(req, res){
console.log('Worker %d running!', cluster.worker.id);
res.send('Hello World from worker ' + cluster.worker.id);
});
}); // child process
}// else
节点--debug server.js
调试端口监听5858
CPU的数目:4
调试器监听端口5859
调试器听在港口5860
调试器侦听端口5861
调试端口监听5862
我是一个工人......让继续
woker ID:1现在侦听端口:8082
我是一个工人......让继续
我是一个工人......让继续
我是一个工人......让继续
woker ID:4现在监听端口:8082
woker ID:3现在监听端口:8082
woker ID:2现在监听端口:8082
工2跑步!
工人2正在运行!
工人2正在运行!
工人2正在运行!
哪种工作者创作方式正确?自从它在港口收听以来,在全球范围内创建表达对象会造成任何问题?
感谢,对xplanation和纽带。 – Martin