基础:

我需要触发一个Interval函数,该函数每小时仅调用一次第三方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 Node.js方法放在哪里,该方法只能由主进程处理。

似乎没有太多关于这个特定主题的指南或教程。任何帮助,不胜感激。

最佳答案

是的,您基本上是正确的-假设您在上面定义了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

关于javascript - 仅在集群NodeJS应用程序中的主进程上执行代码,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50933525/

10-09 14:17