mysql - Nodejs 中的嵌套 Cron 作业

标签 mysql node.js express cron

我有一个“锦标赛”sql 表,其中包含锦标赛的开始时间和结束时间。我还有另一个包含playerId 和tournamentIds 的表,这样我就可以知道哪些玩家参加了哪个锦标赛。 我想做的是运行一个 cron 任务来检查我的锦标赛表并查看锦标赛是否已经结束,以便它可以通过外部 api 检查玩家结果。问题是外部 API 有速率限制,我必须每 1.5 秒发送一次请求。

我试图做的是每 10 秒编写一个 cron 作业来检查我的锦标赛表(除了继续检查数据库之外,我想不出任何其他解决方案):

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 并检查结果。您可以像这样安排一个作业

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"];
                        }
})

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

关于mysql - Nodejs 中的嵌套 Cron 作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30629291/

相关文章:

node.js - ExpressJS View 中的变量

node.js - Express 3 错误中间件未被调用

mysql - 将csv文件导入MySQL中带有外键和主键的3个表

php - 准备/绑定(bind)值的调用值

javascript - 在中间件中获取响应状态码

node.js - fs.existsSync 不是一个函数 node.js/electron 应用程序

mysql - 合并2个MySQL数据库

mysql - 在 MySql 的 where 子句中使用别名

node.js - 使用 Node JS 验证 jwt token 和代理到另一台服务器

javascript - 如何跨 NodeJs 应用程序和模块正确重用与 Mongodb 的连接