【问题标题】:Executing code only on a Master process in a clustered NodeJS application仅在集群 NodeJS 应用程序中的主进程上执行代码
【发布时间】:2018-11-28 17:16:25
【问题描述】:

基础知识:

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

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

//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 方法放在哪里,它只能由主进程处理。

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

【问题讨论】:

    标签: javascript node.js express production


    【解决方案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

    【讨论】:

    • 谢谢!我去看看。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多