原文你地址: Node定时工作
背景
目前咱们遇到了这样一个需要,每个用户都能够自定义定时推送,定时工作的工夫配置由用户本人配置,随时批改,而不是传统的由服务器设定好工夫跑定时工作。
如果是已知定时工作循环周期,那么Linux Crontab 定时工作即可实现。在node中也曾经有绝对成熟的计划。上面将我本人理解到的Node定时工作计划计划做一个介绍。
egg框架提供的schduler定时工作
egg是阿里旗下的Node企业级利用框架,它提供了一套机制给开发者优雅的编写定时工作,具体参考官网文档:https://eggjs.org/zh-cn/basic... ,这里不对具体用法做具体论述,只简略讲一下它的配置用法。
1.动态定时工作,即定时周期,解决逻辑写死。
2.动静配置定时工作,这种相对来说灵便一点,开发者能够通过配置文件管制定时工作周期。
3.通过代码手动触发定时工作,咱们能够依据一些逻辑判断是否触发定时工作。
从上述三点看,egg提供的定时工作不能满足咱们须要用户自行配置定时周期的需要,所以只能寻求其余计划,通过查问材料咱们发现了node-schedule的库也提供了定时工作的性能。
node-schedule
在浏览了node-schudule的文档 https://www.npmjs.com/package... 之后,他的用法如下:
const schedule = require('node-schedule');const job = schedule.scheduleJob('42 * * * *', function(){ console.log('The answer to life, the universe, and everything!');});
是的,他反对自定义定时周期,能够满足咱们的需要,能够作为咱们的抉择,Nice!
持续浏览其余开发者的应用文章,发现有一个node-schedule的相干问题记录,简要说就是定时器在预约工夫执行了2次,具体问题见原文:https://cnodejs.org/topic/5b5... 。这是一个低概率的问题,咱们没有去做验证,因为咱们的需要,及时定时器执行两次,对咱们的后果并没有影响,所以这不是妨碍咱们应用它的阻碍,有趣味的同学能够去测测bug。
写在最初
最初这里是对咱们本人我的项目定时定时工作解决方案的总结,不感兴趣的同学可略过。
咱们的后端就是用的egg框架,所以最初咱们的解决方案是在agent过程中加了node-schdule的定时器,用户的定时器都会同步的agent过程中执行,目前咱们的用户量不大,临时只想到了这种解决形式,后续起量后可能会分布式部署后盾,这会是一个问题,量大的话单过程跑也会是一个问题,并且egg自身不倡议在agent过程中做太多业务相干的货色。还有个比拟重要的是agent是辅助过程,一些work的公共工作切实agent中实现的,agent产生未捕捉的谬误不会退出重启,所以容错解决必须要做,而且要做好。
如果你有更好的计划,欢送 留言 通知咱们。