node 定时器 定时任务,nodejs定时器

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: