用户预定作业

时间:2016-09-13 01:38:26

标签: javascript node.js

我想让我的用户在他们希望特定操作发生时设置时间表。我在azure上使用节点服务器。我目前正在查看node-schedule并将使用它。我正在考虑的是每小时运行一个主计划,检查数据库是否有用户指定的计划,此计划根据用户的计划设置新的计划。但我不知道这是不是一个好习惯,而且我担心服务器负载。

2 个答案:

答案 0 :(得分:2)

您可以使用节点cron,并以不同方式容纳。 下面的伪代码给出了一个大致的想法。

var CronJob = require('cron').CronJob;

new CronJob('0 0 * * * *', function () { // every hour

   // check schedules planned for the future, stored as ISODate
   DB.getUserSchedule({jobdate:{$gte:Date.now()},

     function(userSchedules) {
           userSchedules.forEach(sched) {

             // convert the date back to a string parsed by cron
             var d=extractDayHourMin(sched)
             var jobtime = d[4] +' '+d[3]+' '+d[2]+' '+d[1]+' '+d[0]

             // setup a new job
             var job=new CronJob(jobtime, function() {
                performUserJob()
                job.stop(); // fires only once
                DB.removeUserSchedule(userSchedule);
             })});

请参阅https://github.com/ncb000gt/node-cron

然而,这可能不是最佳解决方案:这确实创建了与计划一样多的流程,因此,它会消耗比所需更多的资源。根据可能日历的粒度(小时,1/2小时,1 / 4h),您可以每小时(或30或15分钟)查询数据库以检索每个满足的日期,而不是计划调度程序,并触发适当的功能。

答案 1 :(得分:1)

搜索Quartz计划。 我的项目使用它来设置发送电子邮件的时间。