当前位置: 首页 > 后端技术 > Node.js

#Node定时任务怎么做

时间:2023-04-03 19:12:05 Node.js

原文地址:Node定时任务后台目前遇到这样一个需求,每个用户都可以自定义定时推送,定时任务的时间配??置是用户自己配置的,可以随时修改代替传统上,时间是由服务器设置的运行计划任务。如果知道定时任务的循环周期,就可以执行LinuxCrontab定时任务。node.js中也有比较成熟的解决方案。下面介绍一下自己学习到的Node定时任务解决方案。egg框架提供的schduler定时任务是阿里巴巴旗下Node的企业级应用框架。它提供了一套机制供开发者优雅的编写定时任务。具体可以参考官方文档:https://eggjs.org/zh-cn/basic...,具体的用法这里就不细说了,简单说说它的配置用法。1.静态定时任务,即定时循环,处理逻辑是硬编码的。2、定时任务的动态配置,比较灵活。开发者可以通过配置文件来控制定时任务的周期。3.通过代码手动触发定时任务,我们可以根据一些逻辑判断是否触发定时任务。从以上三点来看,egg提供的定时任务不能满足我们用户自行配置定时周期的需求,只能寻求其他解决方案。通过查询资料,我们发现node-schedule库也提供了定时任务的功能。node-schedule浏览了node-schedulehttps://www.npmjs.com/package...的文档后,其用法如下:constschedule=require('node-schedule');constjob=schedule.scheduleJob('42****',function(){console.log('生命、宇宙和一切的答案!');});是的,他支持自定义定时周期,可以满足我们的需求,可以作为我们的选择,Nice!继续浏览其他开发者的使用文章,发现有一个node-schedule相关的问题记录。简而言之,定时器在预定时间执行两次。具体问题见原文:https://cnodejs.org/topic/5b5...。这是一个低概率的问题。我们没有做验证,因为我们的要求,及时的定时器执行两次对我们的结果没有影响,所以这不是阻碍我们使用的障碍。有兴趣的同学可以去测试bug。写在最后。这里总结一下我们自己的项目计时和计时任务解决方案。不感兴趣的同学可以略过。我们的后端使用的是egg框架,所以我们最终的解决方案是在agent进程中添加一个node-schdule定时器,用户的定时器会在synchronized的agent进程中执行。目前,我们的用户数量并不多。暂时只能想到这个方案。后续后续可能会采用分布式方式部署后台。这将是一个问题。如果体积大,跑单个进程也会有问题,egg本身也不建议在agent进程做太多。业务相关的东西。还有一点很重要,代理是一个辅助进程。一些公共工作在代理中完成。如果发生未捕获的错误,代理将不会退出并重新启动。所以,容错一定要做好,而且要做好。如果您有更好的解决方案,请留言告诉我们。