用户预定的工作

我想让我的用户设置一个时间表,当他们想要发生一个特定的行动。 我在Azure上使用节点服务器。 我目前正在查看节点时间表,并将使用它。 我正在考虑的是每小时运行一个主时间表,检查用户指定的时间表的数据库,这个时间表根据用户的时间表设置一个新的时间表。 但是我不知道这是否是一个好的做法,加上我关心的是服务器负载。

您可以使用节点的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

然而,这可能不是最好的解决scheme:这确实创造了像进度一样多的进程,所以是的,它会消耗比所需更多的资源。 取决于可能的日历(小时,半小时,1/4小时)的粒度,您也可以每小时(或30或15分钟)查询数据库来检索每个遇到的date,并触发适当的function。

search石英时间表。 我的项目使用它来设置发送电子邮件的时间。