我有4个核心并根据此示例运行此代码:
var cluster = require('cluster');
var http = require('http');
var numCPUs = require('os').cpus().length;
var id = 0;
if (cluster.isWorker) {
id = cluster.worker.id;
}
var iterations = 1000000000;
console.time('Function #' + id);
for (var i = 0; i < iterations; i++) {
var test = 0;
}
console.timeEnd('Function #' + id);
if (cluster.isMaster) {
// Fork workers.
for (var i = 0; i < numCPUs; i++) {
cluster.fork();
}
}
Run Code Online (Sandbox Code Playgroud)
有了4个fork(上面的代码),我得到了:
功能#0:1698.801ms
功能#1:3282.679ms
功能#4:3290.384ms
功能#3:3425.090ms
功能#2:3424.922ms
有了3个叉子,我得到了:
功能#0:1695.155ms …
当您使用Cluster之类的东西进行分叉或启动多个工作时:
是否创建了多个线程或Node进程实例?这会打破Node的单线程概念吗?
工人之间如何处理请求?Cluster是否提供了一些智能机制来平衡对多个工作者的所有请求?
我正在尝试在我的 Express 应用程序中使用集群模块。我使用 express-generator 创建我的应用程序结构,但我不确定如何在保持 app.js 和 bin/www 分离的同时合并集群模块。我看过使用带有 express 的集群的教程和 github 示例,但在完整的应用程序框架中没有。有没有办法在合并集群模块的同时保持app.js和www的分离?
这是我的完整 bin/www 文件:
#!/usr/bin/env node
/**
* Module dependencies.
*/
var app = require('../app');
var debug = require('debug')('football:server');
var http = require('http');
var cluster = require('cluster');
var numCPUs = require('os').cpus().length;
/**
* Get port from environment and store in Express.
*/
var port = normalizePort(process.env.PORT || '3000');
app.set('port', port);
if(cluster.isMaster){
// Fork workers.
for (var i = 0; i < numCPUs; i++) {
console.log('forking process', i)
cluster.fork(); …Run Code Online (Sandbox Code Playgroud) 考虑以下node.js集群配置。如何打开off回调以防止进一步消息回调?碰巧没有off方法。我必须用一个新的回调来更新回调,而且似乎所有旧的回调都被触发了。
cluster.on('fork', worker => {
worker.on('message', msg => {// Do something...})
})
Run Code Online (Sandbox Code Playgroud) 我已经阅读了一些关于Node.js 0.8中引入的集群模块的内容,但我不确定如何(或者我是否应该)将其应用于我在Express上运行的网站.我有一个漂亮的vanilla Express设置:由Hogan.js呈现的模板,由Stylus编译的CSS,没有websockets或花哨的中间件.
使用群集模块可以获得显着的性能提升吗?
如果是这样,如何最好地在标准Express项目中使用集群?
我决定要研究用NodeJS服务器处理大量流量的最佳方法是什么,我对2个数字海洋服务器进行了一次小测试,它有1GB RAM/2个CPU无群集服务器代码:
// Include Express
var express = require('express');
// Create a new Express application
var app = express();
// Add a basic route – index page
app.get('/', function (req, res) {
res.redirect('http://www.google.co.il');
});
// Bind to a port
app.listen(3000);
console.log('Application running');
Run Code Online (Sandbox Code Playgroud)
群集服务器代码:
// Include the cluster module
var cluster = require('cluster');
// Code to run if we're in the master process
if (cluster.isMaster) {
// Count the machine's CPUs
var cpuCount = require('os').cpus().length;
// Create a worker for each …Run Code Online (Sandbox Code Playgroud)