Nodejs 中的嵌套 Cron 作业

Nested Cron jobs in Nodejs

我有一个 'Tournament' sql table,其中包含 start_time 和 end_time 我的锦标赛。我还有另一个 table,它有 playerId 和 tournamentIds,所以我可以知道哪些玩家参加了哪个锦标赛。 我想要做的是 运行 一个 cron 任务来检查我的比赛 table 并查看比赛是否已经结束,以便它可以检查来自外部 api 的玩家结果。问题是外部 API 有速率限制,我必须每 1.5 秒发送一次请求。

我尝试做的是每 10 秒写一个 cron 作业来检查我的比赛table(我想不出任何其他解决方案,只能继续检查数据库):

cron.job("*/10 * * * * *", function(){
    result = Query tournament table Where EndTime=<Now && EndTime+10second>=Now
    if(result is not empty)
    {
      cron.job("*/1.5 * * * * *",function(){
           send API requests for that userId
            parse & store result in db
      });
    }
}); 

我对此感觉不对,而且它对我来说似乎很麻烦。因为内部 cron 作业可能需要 10 秒以上的时间。有什么好的解决方案可以做到这一点。我正在使用 ExpressJS & MySQL.

您面临的问题可以通过事件发射器解决。 npm 中有一个非常有用的模块 node-schedule ,它可以在您所说的这种情况下为您提供帮助。你要做的是安排一个工作在项目的截止日期解雇,该工作将击中第 3 方 api 并检查 results.You 安排这样的工作

var schedule = require('node-schedule');
schedule.scheduleJob("jobName", "TimeToFire", function () {
//Put your api hit here.

//finally remove the schedule
if ("jobName" in schedule.scheduledJobs) {
schedule.scheduledJobs["jobName"].cancel();
delete schedule.scheduledJobs["jobName"];
                        }
})

确保将所有计划的作业存储在数据库中,因为服务器崩溃将使您计划的所有计划失效,并且必须重新计划它们。