node 定时器 定时任务,nodejs定时器
本文介绍了节点定时任务的实现方法,希望对你有所帮助!
node.js速度课程简介:进入学习
目前我们遇到了这样一个需求,每个用户都可以自定义定时推送,定时任务的时间配置由用户自己配置,可以随时修改,而不是传统的服务器设置运行定时任务的时间。[推荐研究:《nodejs 教程》]
如果知道定时任务的周期,就可以实现Linux Crontab定时任务。node中也有相对成熟的方案。下面是我自己了解到的节点定时任务方案介绍。
egg框架提供的schduler定时任务
egg是阿里旗下Node的一个企业应用框架,为开发者优雅地编写定时任务提供了一套机制。详情请参考官方文件:https://eggjs.org/zh-cn/basics/schedule.html。这里就不细说具体用法了,简单说说它的配置和用法。
1.静态定时任务,也就是定时循环,处理逻辑写死。
2.动态配置调度任务,相对灵活。开发人员可以通过配置文件控制计划的任务周期。
3.通过代码手动触发定时任务,我们可以按照一定的逻辑来判断是否触发定时任务。
从以上三点来看,egg提供的定时任务无法满足我们用户自行配置定时周期的需求,只能寻求其他方案。通过查询数据,我们发现节点调度库还提供了定时任务的功能。
node-schedule
在浏览了node-schudule的文档https://www.npmjs.com/package/node-schedule后,他的用法如下:
const schedule=require( node-schedule );
const job=schedule . schedule job( 42 * * * *,function(){
console.log(生命、宇宙和一切的答案!);
});是的,他支持自定义定时周期,可以满足我们的需求,成为我们的选择,Nice!
继续浏览其他开发者的使用文章,发现有node-schedule相关问题的记录。简单来说,定时器在预定时间执行两次。具体问题见原文:https://cnodejs.org/topic/5b58414b8d66b90b2b7384a7。这是一个低概率问题,我们没有验证。因为我们的需求,定时器在时间上执行了两次,并不影响我们的结果,所以并不是阻碍我们使用的障碍。感兴趣的同学可以测试bug。
写在最后
最后,这里总结一下我们自己的项目计时任务解决方案。没兴趣的同学可以跳过。
我们的后端是egg框架,所以最后我们的解决方案是在代理进程中添加node-schedule的定时器,用户的定时器会在同步代理进程中执行。目前我们的用户量并不大,暂时只想到这个方案,后续量大后可能会分布式部署后端。
这将是一个问题,大量票据流程的运行也会是一个问题,egg本身不建议在代理流程中做太多业务相关的事情。还有一点很重要,代理是一个辅助过程。工作的一些公共工作实际上是在代理中完成的,如果出现未被捕获的错误,代理不会退出重启,所以容错处理一定要做,并且做好。
有关编程的更多信息,请访问:编程视频!这就是如何在Nodejs中执行定时任务的细节。请多关注我们的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。