请耐心等待我,因为我对群集完全不熟悉,而且文档没有点击我。
if (cluster.isMaster)
{
for (let i = 0; i < numCPUs; i++)
{
cluster.fork();
}
for (const file in files)
{
cluster.workers.send(file); //***
}
}
else if (cluster.isWorker)
{
process.on("message", (msg) =>
{
//...Process data here...
});
}
***是我想要的东西。像cluster.workers.send(...)这样的东西会向工作人员发送消息,而任何不忙的人都会接收消息。如果所有工作人员都忙,那么该消息将等待发送,直到有一名自由工作人员。
答案 0 :(得分:2)
如果您将拥有大量任务,则需要一个数据库来管理队列,而Vinay Pandya建议,redis将是一个很好的选择。
您希望防止额外的依赖关系,您可以在群集主进程中使用队列数组,并将任务推送/移出该数组。要确定空闲节点,您可以维护“节点”对象,并在完成其任务时从每个节点获得反馈以更新它。可以使用process.send完成反馈。