我有一个'锦标赛'sql表,其中包含我的锦标赛的start_time和end_time。我还有另一个有playerId和tournamentIds的桌子,所以我可以告诉哪些球员在哪场锦标赛中比赛。 我正在尝试做的是运行一个cron任务来检查我的锦标赛表,看看锦标赛是否已经结束,这样它就可以检查外部api的玩家结果。问题是外部API有速率限制,我必须每1.5秒发送一次请求。
我尝试做的是每10秒写一个cron作业来检查我的锦标赛表(我无法提出任何其他解决方案,而不是继续检查db):
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&amp;的MySQL。
答案 0 :(得分:1)
您遇到的问题可以通过事件发射器解决。在npm中有一个非常有用的模块节点计划,它可以帮助您在这个场景中告诉您。你要做的是在项目的最后期限安排一份工作,该工作将打到第三方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"];
}
})
确保您存储在数据库中安排的所有作业,因为服务器崩溃将使您已安排的所有计划无效,并且必须重新安排它们。