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

时间:2018-06-19 17:02:03

标签: javascript node.js express production

基础知识:

我需要触发一个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 Nodejs方法放置在什么地方,该方法只能由主进程处理。

似乎没有太多关于此特定主题的指南或教程。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:1)

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