是否可以在NodeJ中创建一个长时间运行的进程来处理许多后台操作而不会中断主线程;就像Python中的Celery一样。
提示,如果发生故障或需要重新启动远离主进程的情况,最好能够管理长时间运行的进程。
答案 0 :(得分:2)
http://nodejs.org/api/child_process.html是创建长时间运行进程的正确API,您可以完全控制子进程(访问stdin / out / err,可以发送信号等)。 但是,这种方法要求您的节点进程是这些子节点的父节点。。如果您希望孩子比父母更活跃,请在孩子创建期间(options.detached
之后)查看child.unref()
。
但请注意,Node.js非常适合避免此类架构。通常,node.js会在主线程中执行所有后台操作。我一直在编写具有大量流量的应用程序(例如每秒数千个请求),DB,Redis和RabbitMQ都可以从主线程访问所有内容并且没有任何子进程 - 并且它运行正常,因为它应该是,因为Node的偶然IO系统。
我通常只使用child_process api来启动单独的可执行文件(例如ffmpeg来转码某些视频文件),除此之外,单独的进程可能不是您想要的。
还有一个集群api允许单个主服务器处理许多工作进程,但我认为它不是你想要的。
答案 1 :(得分:1)
您可以创建子进程来处理后台操作。然后使用消息在新进程和主线程之间传递数据。
http://nodejs.org/api/child_process.html
<强>更新强>
看起来你需要使用服务器队列,排序为beanstalkd http://kr.github.io/beanstalkd/ + https://www.npmjs.com/package/fivebeans。