节点群集不会将任务分派给另一个可用的工作人员

时间:2016-02-23 06:10:09

标签: javascript node.js express node-cluster

这是我关于堆栈溢出的第一个问题,所以请原谅我这个问题中的任何错误或信息不足。

所以,我正在尝试将nodeJS的集群模块用于我的服务器,并通过我的windows机器运行nodeJS。我知道nodeJS在Windows中没有任何针对集群模块的调度策略,所以我已经明确地将scheduling_policy设置为rr,如nodeJS docs所述。 但问题是当我试图通过将一个工人置于一个无限循环中而使一个工人忙碌时;当我们尝试向服务器请求' /'时,服务器不会将请求分派给另一个可用且可用的工作人员。资源。

请帮助我为什么不向其他工作人员发送请求。



var cluster=require('cluster');
if(cluster.isMaster){
	var cores=require('os').cpus().length;
	console.log("Master Cluster setting up :-"+cores+" workers");
	for(var i=0;i<cores;i++)
		cluster.fork();
	cluster.on('online',(worker)=>{
		console.log("Worker with Process ID :- "+worker.process.pid+" online");
	});
	cluster.on('exit',(worker)=>{
		console.log("worker "+worker.process.pid+" died...So setting up a new worker");
		cluster.fork();
	});
}
else{
	var app=require('express')();
	app.get('/',(req,res)=>{
		console.log("Process with pid "+process.pid+" is handling this request");
		while(true);
		res.write("Yes!");
		res.end();
		//while(true);
	})
	app.listen('3000');
}
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:0)

您编写的上述代码工作正常。但是,您需要向节点服务器发送并发请求,而不是在循环中发送请求,您将看到节点集群模块的强大功能。

节点群集模块有两种分配传入连接的方法。

第一个(除了Windows之外的所有平台上的默认设置)是循环法。

第二种方法是主进程创建侦听套接字并将其发送给感兴趣的工作者。然后工人直接接受传入的连接

您可以使用http://blog.remarkablelabs.com/2012/11/benchmarking-and-load-testing-with-siege发送并发请求。现在您将看到切换到您的流程。