仅在集群 NodeJS 应用程序中的主进程上执行代码

Executing code only on a Master process in a clustered NodeJS application

基础知识:

我需要触发调用第三方 api 端点的间隔函数 每小时仅一次 。我不希望在我的工人中产生这个函数,因为每个工人每小时都会调用这个函数。

我在很多例子中都看到了这一点:

//Example Clustering
   if (cluster.isMaster) {  

   //Do I insert my function here?

   for (var i = 0; i < numCPUs; i++) {
    // Create a worker
    cluster.fork();
   }

} 
   else {
   var app = express();

   app.get('/', function (req, res) {
    res.send('Hello World!');
   });


   app.listen(8080);
}

我不知道将我的 Timed Nodejs 方法放在哪里,它只能由主进程处理。

似乎没有太多关于这个特定主题的指南或教程。非常感谢任何帮助。

是的,您基本上是正确的 - 假设您在上面定义了 makeHttpRequest,代码可能如下所示:

if (cluster.isMaster) {  
   setInterval(
     () => makeHttpRequest(),
     1000 * 60 * 60
   )

   for (var i = 0; i < numCPUs; i++) {
    // Create a worker
    cluster.fork();
   }

} else {
   var app = express();

   app.get('/', function (req, res) {
    res.send('Hello World!');
   });

   app.listen(8080);
}

请记住,setInterval 在短时间或长时间跨度内都不可靠 ,并且有更好的工具可供使用。如果您需要较长的间隔(例如 1 小时),您可以使用 https://github.com/kelektiv/node-cron