2015-04-28 40 views
0

我有一個我正在編寫的mean.js應用程序,我在概念上對後臺進程感到困惑。Mean.js Node.js後臺進程

我需要在後臺持續運行MongoDB的數據庫進行操作和做的東西一樣清理,電子郵件,微博的一些流程等

我需要很多的相同的功能和庫我有在我的網絡應用程序可用於這些背景特效。

這樣做的最好方法是什麼?我是否從一個全新的源代碼基礎開始,將這些工作程序像一個單獨的應用程序一樣對待?或者我創建一個守護進程文件夾,並在我用grunt啓動server.js時分叉後臺特效?

我覺得我很迷惑自己,可能會讓它變得更加複雜。我查看了節點守護進程和child_processes以及simple_daemon。但我不知道要採取什麼路徑。

感謝您的幫助。

+2

一旦我得到了pm2,特別是'pm2 save',我不再擔心它。它是最可維護的(imho)使用多個或多或少相同的應用程序的多個副本,一些只做bg的東西,一些接電話。如果你真的需要內存,你可以評論你不需要的背景工作者的部分,或者你甚至可以有條件地要求他們讓同一個文件戴上很多帽子。 – dandavis

回答

2

您可以使用setInterval()在mean.js應用程序中運行計劃或重複任務。由於node.js的工作方式,只要節點運行應用程序,定義在setInterval()或setTimeout()中運行的任何回調函數都將在加載後運行。這意味着您可以將後臺邏輯保留在控制器/模型或相鄰文件中。您可以包含您的後臺腳本,例如從主要的app.js文件或從您的控制器,模型等的任何地方請求() - 它可以是例如

例如,

app.js:

require('tasks/doStuff'); 
require('express'); 

/* express/app stuff here */ 

任務/ doStuff.js:

require('mongoose'); 
require('some/other/stuff'); 

setInterval(function() { 
    console.log('interval happened'); 
}, 1000); 

這種方法確實需要一些設計/建築方面的考慮。也就是說,您的任務現在與成功執行節點mean.js應用程序相關聯。如果您的mean.js應用程序崩潰/死亡,您的任務也將死亡。

+0

啊。好的,這對我來說很有意義。但是我的困惑是:如果node.js應用程序是一個單線程的進程,並且我的setinterval thingy需要很長時間(比如說一個長查詢)纔會阻止傳入的web請求? –

+1

理論上是的。但在實踐中,不。只要你在長時間運行的函數上使用異步方法,你就不會阻塞該線程。這是Node.js的基礎。這裏更詳細的:http://stackoverflow.com/questions/14795145/how-the-single-threaded-non-blocking-io-model-works-in-node-js –

+0

非常好!謝謝! –