节点集群未将任务分派给另一个可用的工作人员
Node Cluster is not dispatching task to another worker available
这是我的第一个 Stack-overflow 问题,所以请原谅我在这个问题中的任何错误或信息不足。
所以,我正在尝试为我的服务器使用 nodeJS 的集群模块,并且我通过我的 windows 机器 运行 nodeJS。我知道 nodeJS 在 windows 中没有任何集群模块的调度策略,所以我已经明确地将 scheduling_policy 设置为 rr ,如 nodeJS 文档所述。
但是问题是当我试图通过将一个工人置于无限循环中来让他忙碌时;当我们尝试向服务器请求“/”资源时,服务器未将请求分派给另一个可用且空闲的工作人员。
请帮我看看为什么它没有将请求发送给其他工作人员。
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');
}
上面你写的代码运行良好。但是你需要向你的节点服务器发送并发请求而不是循环发送请求,那么你就会看到节点集群模块的强大之处。
节点集群模块有两种分发传入连接的方法。
第一个(也是除 Windows 之外所有平台上的默认方法)是循环法。
第二种方法是主进程创建侦听套接字并将其发送给感兴趣的工作人员。然后工作人员直接接受传入连接
您可以使用 http://blog.remarkablelabs.com/2012/11/benchmarking-and-load-testing-with-siege 发送并发 request.Now 您会看到切换到您的进程。
这是我的第一个 Stack-overflow 问题,所以请原谅我在这个问题中的任何错误或信息不足。
所以,我正在尝试为我的服务器使用 nodeJS 的集群模块,并且我通过我的 windows 机器 运行 nodeJS。我知道 nodeJS 在 windows 中没有任何集群模块的调度策略,所以我已经明确地将 scheduling_policy 设置为 rr ,如 nodeJS 文档所述。 但是问题是当我试图通过将一个工人置于无限循环中来让他忙碌时;当我们尝试向服务器请求“/”资源时,服务器未将请求分派给另一个可用且空闲的工作人员。
请帮我看看为什么它没有将请求发送给其他工作人员。
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');
}
上面你写的代码运行良好。但是你需要向你的节点服务器发送并发请求而不是循环发送请求,那么你就会看到节点集群模块的强大之处。
节点集群模块有两种分发传入连接的方法。
第一个(也是除 Windows 之外所有平台上的默认方法)是循环法。
第二种方法是主进程创建侦听套接字并将其发送给感兴趣的工作人员。然后工作人员直接接受传入连接
您可以使用 http://blog.remarkablelabs.com/2012/11/benchmarking-and-load-testing-with-siege 发送并发 request.Now 您会看到切换到您的进程。