如何充分利用Node.js Web Apps的服务器容量

最新的Node.js版本(4.2.3)现在是否支持multithreading? 很难find有用的答案,因为多数相关的讨论是从几年前。

一个node.js云服务器如何处理node.js Web App请求? 假设一个2-Core服务器运行一个node.js应用程序,这是否意味着不pipestream量有多大,它们都通过一个单核而通过,另一个核心总是空闲?

如果答案是肯定的,一些第三方库的任何build议都可能实现node.js Web Apps的multithreading化?


感谢您的帮助。 除了上面的问题。 我采用了集群代码到一个Express.js的networking应用程序,结果是else块在下面的代码部分没有执行。 var app = require('../ app'); var debug = require('debug')('NewExpress:server'); var http = require('http'); var cluster = require('cluster'); var numCPUs = require('os')。cpus()。length;

if (cluster.isMaster) { // Fork workers. for (var i = 0; i < numCPUs; i++) { cluster.fork(); } cluster.on('exit', function(worker, code, signal) { console.log('worker ' + worker.process.pid + ' died'); }); } else { /** * Get port from environment and store in Express. */ var port = normalizePort(process.env.PORT || '3000'); app.set('port', port); /** * Create HTTP server. */ var server = http.createServer(app); /** * Listen on provided port, on all network interfaces. */ server.listen(port); server.on('error', onError); server.on('listening', onListening); } 

任何想法,我应该如何在这里实现群集?

你可以像这样使用你的每个cpus:

 var cluster = require('cluster'); var numCPUs = require('os').cpus().length; if (cluster.isMaster) { for (var i = 0; i < numCPUs; i++) { cluster.fork(); } } else { startServer(); } 

更新

举一个更完整的例子,你可以把它放在index.js中:

 var express = require('express'); var app = express(); var cluster = require('cluster'); var numCPUs = require('os').cpus().length; if (cluster.isMaster) { for (var i = 0; i < numCPUs; i++) { cluster.fork(); } } else { startServer(); } function startServer() { var server = app.listen(3000, function () { var port = server.address().port; console.log('Example app listening at %s', port); }); } 

在terminal上运行node index.js来启动它。 它会logging下我的8个CPU怪物:

 Example app listening at 3000 Example app listening at 3000 Example app listening at 3000 Example app listening at 3000 Example app listening at 3000 Example app listening at 3000 Example app listening at 3000 Example app listening at 3000 

更新2

看到问题编辑后,我修改了你的例子。 这应该工作

 var http = require('http'); var express = require('express'); var app = express(); var cluster = require('cluster'); var numCPUs = require('os').cpus().length; if (cluster.isMaster) { // Fork workers. for (var i = 0; i < numCPUs; i++) { cluster.fork(); } cluster.on('exit', function(worker, code, signal) { console.log('worker ' + worker.process.pid + ' died'); }); } else { console.log('in else statement'); var port = '3000'; app.set('port', port); var server = http.createServer(app); server.listen(port); } 

它应该在控制台中显示

 in else statement in else statement in else statement in else statement in else statement in else statement in else statement in else statement 

让我知道如果这不是你的运行。