我正在使用Windows 7机器测试NodeJS中的集群。
代码如下:
var cluster = require('cluster');
var http = require('http');
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');
});
cluster.on('listening', function(worker, address) {
console.log("A worker with #" + worker.id + " is now connected to " + address.address + ":" + address.port);
});
} else {
// Workers can share any TCP connection
// In this case its a HTTP server
http.createServer(function (req, res) {
console.log(cluster.worker.id + ' is responding..!!!');
var j = 0;
//long running task
for (var i = 0; i < 10000000000; i++) {
j++;
}
res.writeHead(200);
res.end("hello world\n");
}).listen(8080);
}
当我运行这段代码时,看起来所有的请求都被发送到了最后创建的worker节点,而所有剩下的worker节点都处于空闲状态,所有的请求都被顺序中最后创建的节点处理。
我已经尝试做一些触及,但似乎还没有人报告这个问题。我看到一个关于堆栈溢出的帖子有同样的问题,没有解决方案。我正在使用节点v0.10.26。
请给我指个正确的方向。
4条答案
按热度按时间8oomwypt1#
如果其他人也有同样的问题,这个答案也适用于他们。使用不同的浏览器发出HTTP请求,这将确保使用不同的worker。
iyr7buue2#
我刚刚使用了两个浏览器,并在命令行中使用了curl。我得到了相同的结果:http://prntscr.com/8fxx4g
但正确答案是node.js中的集群不工作。只有一个工作线程始终响应:
@dandavis在评论中说的是真的:群集不执行循环负载平衡,因此,只要Worker 1可用于请求,它就会处理这些请求
7hiiyaii3#
require('os').cpus().length是逻辑处理器的数量。如果转到“任务管理器”-〉“性能”-〉“CPU”,您将看到logicalProcessor的数量
xjreopfe4#
在Windows上,群集调度被禁用,只有一个工作线程获得请求的全部负载。
或环境变量
我尝试将环境变量作为系统全局变量,但它不起作用。