浅谈Nodejs中要怎么做定时任务
本篇文章给大家介绍一下Node定时任务的实现方法,希望对大家有所帮助!
目前我们遇到了这样一个需求,每个用户都可以自定义定时推送,定时任务的时间配置由用户自己配置,随时修改,而不是传统的由服务器设定好时间跑定时任务。【推荐学习:《nodejs 教程》】
如果是已知定时任务循环周期,那么Linux Crontab 定时任务即可实现。在node中也已经有相对成熟的方案。下面将我自己了解到的Node定时任务方案方案做一个介绍。
egg框架提供的schduler定时任务
egg是阿里旗下的Node企业级应用框架,它提供了一套机制给开发者优雅的编写定时任务,详细参考官方文档:https://eggjs.org/zh-cn/basics/schedule.html ,这里不对具体用法做详细阐述,只简单讲一下它的配置用法。
1.静态定时任务,即定时周期,处理逻辑写死。
2.动态配置定时任务,这种相对来说灵活一点,开发者可以通过配置文件控制定时任务周期。
3.通过代码手动触发定时任务,我们可以根据一些逻辑判断是否触发定时任务。
从上述三点看,egg提供的定时任务不能满足我们需要用户自行配置定时周期的需求,所以只能寻求其他方案,通过查询资料我们发现了node-schedule的库也提供了定时任务的功能。
node-schedule
在浏览了node-schudule的文档 https://www.npmjs.com/package/node-schedule 之后,他的用法如下:
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/5b58414b8d66b90b2b7384a7 。这是一个低概率的问题,我们没有去做验证,因为我们的需求,及时定时器执行两次,对我们的结果并没有影响,所以这不是阻碍我们使用它的障碍,有兴趣的同学可以去测测bug。
写在最后
最后这里是对我们自己项目定时定时任务解决方案的总结,不感兴趣的同学可略过。
我们的后端就是用的egg框架,所以最后我们的解决方案是在agent进程中加了node-schdule的定时器,用户的定时器都会同步的agent进程中执行,目前我们的用户量不大,暂时只想到了这种解决方式,后续起量后可能会分布式部署后台。
这会是一个问题,量大的话单进程跑也会是一个问题,并且egg本身不建议在agent进程中做太多业务相关的东西。还有个比较重要的是agent是辅助进程,一些work的公共工作实在agent中完成的,agent发生未捕获的错误不会退出重启,所以容错处理必须要做,而且要做好。
更多编程相关知识,请访问:编程视频!!
以上是浅谈Nodejs中要怎么做定时任务的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

Node.js 是一种服务器端 JavaScript 运行时,而 Vue.js 是一个客户端 JavaScript 框架,用于创建交互式用户界面。Node.js 用于服务器端开发,如后端服务 API 开发和数据处理,而 Vue.js 用于客户端开发,如单页面应用程序和响应式用户界面。

Node.js 中存在以下全局变量:全局对象:global核心模块:process、console、require运行时环境变量:__dirname、__filename、__line、__column常量:undefined、null、NaN、Infinity、-Infinity

要连接 MySQL 数据库,需要遵循以下步骤:安装 mysql2 驱动程序。使用 mysql2.createConnection() 创建连接对象,其中包含主机地址、端口、用户名、密码和数据库名称。使用 connection.query() 执行查询。最后使用 connection.end() 结束连接。

Node.js 安装目录中有两个与 npm 相关的文件:npm 和 npm.cmd,区别如下:扩展名不同:npm 是可执行文件,npm.cmd 是命令窗口快捷方式。Windows 用户:npm.cmd 可以在命令提示符下使用,npm 只能从命令行运行。兼容性:npm.cmd 特定于 Windows 系统,npm 跨平台可用。使用建议:Windows 用户使用 npm.cmd,其他操作系统使用 npm。

是的,Node.js可用于前端开发,主要优势包括高性能、丰富的生态系统和跨平台兼容性。需要考虑的注意事项有学习曲线、工具支持和社区规模较小。

Node.js 和 Java 的主要差异在于设计和特性:事件驱动与线程驱动:Node.js 基于事件驱动,Java 基于线程驱动。单线程与多线程:Node.js 使用单线程事件循环,Java 使用多线程架构。运行时环境:Node.js 在 V8 JavaScript 引擎上运行,而 Java 在 JVM 上运行。语法:Node.js 使用 JavaScript 语法,而 Java 使用 Java 语法。用途:Node.js 适用于 I/O 密集型任务,而 Java 适用于大型企业应用程序。
