当将集群与 Nodejs / Expressjs 一起使用时,页面永久加载
Page loads forever when using clusters with Nodejs / Expressjs
这是我的应用程序: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 没有收到任何请求。
谢谢
相关文章:
- AJAX:为什么不是't我的javascript与内容一起加载
- 避免将lib依赖项与webpack+handlebas加载程序捆绑在一起
- Jquery 工具提示未随 AJAX 数据加载一起显示
- 加载 HTML 模板以通过浏览器与挖空组件一起使用
- 按钮上的数据加载消息无法与ajax调用一起工作
- 我怎么能"加载更多“;数据按类别而不是全部放在一起
- 如何用JavaScript中的Ajax调用代替加载脚本文件(将YQL与JavaScript一起使用)
- Twitter Bootstrap js文件已加载,但无法与requirejs一起使用
- 如何将javascript文件与ng-include模板一起加载
- 如何加载JSON数据以将其与select2插件一起使用
- 当将集群与 Nodejs / Expressjs 一起使用时,页面永久加载
- 将图像组合在一起并在窗口加载时对图像进行动画处理
- 要随索引页一起加载的滚动更新,并在 iframe 加载来自链接的内容时消失
- 如何将模板与加载了从 ember.js 中的调用模板传递的数据的文本框一起使用
- 脚本不加载:将AngularJS与JSON(Firebase)一起使用
- 如何使它工作加载并一起准备好
- 将jQuery、jQueryui和jQuerymobile一起加载
- 有没有一种方法可以将json文件与所有其他js文件一起加载
- 将凭据与Ajax加载一起传递到Web API
- jQuery和延迟加载一起不能工作