当将集群与 Nodejs / Expressjs 一起使用时,页面永久加载

Page loads forever when using clusters with Nodejs / Expressjs

本文关键字:加载 一起 Nodejs Expressjs      更新时间:2023-09-26

这是我的应用程序:app.js

/** Express **/
var express = require('express');
/** Create express application **/
var app = express();
/** Set application port **/
app.set('port', process.env.PORT || 3000);
/** Set application view engine**/
var handlebars = require('express-handlebars').create({
        defaultLayout: 'main',
        helpers: {
            section: function(name, options){
                if(!this._sections) this._sections = {};
                this._sections[name] = options.fn(this);
                return null;
            },
            parrot: function(options){
                return options.fn(this) + ' <b> parrot </b>';
            }
        }   
    });

/*** Cluster Logger**/
app.use(function(req, res, next){
    var cluster = require('cluster');
    if(cluster.isWorker) console.log('CLUSTER: Worker %d received request.', cluster.worker.id);
    next();
});
/** home page**/
app.get('/', function(req, res){
    res.send('Welcome !!');
});
/** about page**/
app.get('/about', function(req, res){
    res.send('About us!');
});
/** contact page **/
app.get('/contact', function(req, res){
    res.send('contact us here');
});
// startServer in export/direct mode
function startServer(){
    app.listen(app.get('port'), function(){
        console.log('Parrot started in '+app.get('env')+' mode on http://localhost:'+
            app.get('port')+
            '; 'n press Ctrl-C to terminate');
    });
}
if(require.main === module){
    startServer();
}else{
    module.exports = startServer;
}

这是鹦鹉.js(包括集群)

//import cluster
var cluster = require('cluster');
//startWorker
function startWorker(){
    var worker = cluster.fork();
    console.log('CLUSTER: Worker %d started', worker.id);
}
if(cluster.isMaster){
    //in case the cluster is Master
    require('os').cpus().forEach(function(){
        startWorker();
    });
    cluster.on('disconnect', function(worker){
        console.log('CLUSTER: Worker %d disconnected from the cluster', worker.id);
    });
    cluster.on('exit', function(worker, code, signal){
        console.log('CLUSTER: Worker %d died with exit code %d (%s)', worker.id, code, signal);
        startWorker();
    });
}else{
    //in case cluster.isWorker (not master), run app directly
    require('./app.js')();
}

问题是,当我运行node app.js时,该应用程序在http://localhost:3000上运行良好......并且该页面在浏览器中运行良好。

当我作为一组集群(带 node parrot.js)运行时,控制台中一切看起来都不错:

CLUSTER: Worker 1 started
CLUSTER: Worker 2 started
Parrot started in development mode on http://localhost:3000;
 press Ctrl-C to terminate
Parrot started in development mode on http://localhost:3000;
 press Ctrl-C to terminate

但是,页面永远加载并且浏览器上不显示任何内容?我不知道这里有什么问题。对不起我的语言,因为我是节点.js新手。

谢谢

我不知道到底是什么问题,但是当我在另一台计算机(使用 32 位操作系统)上进行测试时,上面的示例没有任何问题。

这是我现在的结果,当我在浏览器中访问页面时:

群集:工作线程 1 已启动

CLUSTER: Worker 2 started
Parrot started in development mode on http://localhost:3333;
 press Ctrl-C to terminate
Parrot started in development mode on http://localhost:3333;
 press Ctrl-C to terminate
CLUSTER: Worker 2 received request.
CLUSTER: Worker 2 received request.

以防群集不适合您,请在另一台计算机上进行测试。

我的另一个问题:我不知道为什么所有请求都由集群工作线程 2(最后一个启动)提供服务,似乎工作线程 1 没有收到任何请求。

谢谢