如何处理NodeJS应用程序中的后台进程?
场景: 用户在应用程序中发布内容后,我想要对数据进行处理,从外部资源请求附加数据等操作。所有这些操作都需要花费大量时间,因此我希望将其放在req/res循环之外。理想情况下,只需具有作业队列即可快速转移作业,并且守护进程或任务运行程序将始终获取最旧的作业并进行处理。
在RoR中,我会使用类似于Delayed Job的工具来完成。在Node中,是否有与该API等效的工具?
如何处理NodeJS应用程序中的后台进程?
场景: 用户在应用程序中发布内容后,我想要对数据进行处理,从外部资源请求附加数据等操作。所有这些操作都需要花费大量时间,因此我希望将其放在req/res循环之外。理想情况下,只需具有作业队列即可快速转移作业,并且守护进程或任务运行程序将始终获取最旧的作业并进行处理。
在RoR中,我会使用类似于Delayed Job的工具来完成。在Node中,是否有与该API等效的工具?
如果您需要轻量级的系统,可以在服务器进程中运行,我强烈推荐使用Bull。它具有简单的API,可以对队列进行精细的控制。
如果您熟悉Ruby的Resque,则有Node.js的实现称为Node-resque
Bull和Node-resque都由Redis支持,它在Node.js工作队列中非常普遍。它们能够做到RoR的DelayedJob所做的事情,这只是涉及到您需要的特定功能和API首选项。
setImmediate
调用实现起来很麻烦的CPU密集型计算),否则应该避免使用这个模块。 - wberry我建议使用一个合适的Node.js框架来构建您的应用程序。
我认为最强大且易于使用的是Sails.js。
它是一个MVC框架,所以如果您习惯于在ROR中开发,您会发现它非常容易!
如果您使用它,它已经提供了一个强大(在JavaScript术语中)的作业管理器。
new sails.cronJobs('0 01 01 * * 0', function () {
sails.log.warn("START ListJob");
}, null, true, "Europe/Dublin");
如果您需要更多信息,请随时与我联系!
ChildProcess
API。https://nodejs.org/api/child_process.html - user2524973