Node.js 集群尽可能频繁地处理数据

Node.js Cluster to Process Data as Often As Possible

请多多包涵,因为我是集群的新手,文档不合我意。

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(...) 这样的东西会向工作人员发送消息,不忙的人会收到消息。如果所有工作人员都忙,则消息将等待发送,直到有空闲工作人员。

如果您有大量任务,则需要一个数据库来管理队列,正如 Vinay Pandya 所建议的那样,redis 将是一个不错的选择。

你想防止额外的依赖,你可以在集群主进程中使用一个队列数组,push/shift任务to/from那个数组。要确定空闲节点,您可以维护一个 'nodes' 对象,并在每个节点完成其更新任务时获得反馈。反馈可以用 process.send.