2013-05-12 72 views
1

我正在使用nodejs和expressjs框架實現一個非常基本的網站。這個想法是,用戶進入網站,點擊一個按鈕,將觸發服務器中的cpu密集型任務,並在任務完成後在瀏覽器上獲取消息。如何讓我的nodejs應用程序服務於多個用戶?

對我而言,令人困惑的部分是如何在不阻止事件循環的情況下爲每個用戶完成此任務,因此,沒有用戶必須等待另一個人完成。另外,如何爲每個用戶使用已使用資源的新實例(對象,變量..)。

玩過並閱讀後,我遇到了子進程。基本上,我想爲每個用戶分派一個新的child_process,這樣無論排序需要多少時間,它都不會阻止我的事件循環。但是,我仍不確定這是否是這種情況下最好的做法。

現在,我已經完成了我想要的,但只有一個用戶,但是當嘗試啓動另一個用戶時,事情變得混亂,變量被共享。我知道我不應該使用在模塊中聲明的全局變量,但是可以通過另一種方式使變量在單個模塊中的函數之間共享,但它們對於每個用戶是不同的!

我知道這個問題聽起來很基本,但我有點想念節點js如何爲新用戶提供不同的用戶服務,這些用戶與每個用戶都有關聯。

總之,我的問題是: 1-節點如何同時爲多個用戶服務? 2我何時應該如何分流或執行一個新的子進程,並且是爲每個用戶還是基於我的#core中的#個核心?3-如何爲每個用戶分離我的應用程序中的資源每個用戶都有自己的計數器,電子郵件和其他對象和變量。 4-我什麼時候需要或者我必須殺死我的子進程。

在此先感謝。

CODE:

var cp = require('child_process'); 
var child= cp.fork('./routes/mysort-module'); 

exports.user=function(req,res){ 
    // child = new cp.fork('./routes/mysort-module'); // Should I make new child for each user? 
    child.on('message',function(m){ res.send('DONE');} 
    child.send('START PROCESS'); // Forking a cpu-intensive task in mysort-module.js 

} 

IN MY排序模塊:

var variables = require(...); 
//GLOBAL VARIABLES to be shared among different functions in this module 
process.on('message',function(m){ 
    //sort cpu-intensive task 
    process.send('DONE'); 
}); 
// OTHER FUNCTIONS in THE MODULE that make use of global variables. 

回答

2

你應該嘗試拆分你的問題。但是,我希望這可以回答。

問題1:全局變量不限於請求範圍。這是Node對全球定義的一部分,以某種方式執行此操作是沒有意義的。你根本不應該使用全局變量。

http.createServer(function(req, res) { 
    var a = 1; 
    // req, res, and a are in request scope for your user-associated response 
}); 

消除全局不應該是堅硬::如果模塊A和B共享全局G和模塊C調用A.doThis()和B

的請求範圍由HTTP模塊給定.doThat(),改變C調用A.doThis(G)和B.doThat(G)。對所有的G發生並將其範圍縮小到本地或請求。

此外,如果您需要範圍覆蓋來自一個客戶端的多個請求,請查看「會話」。

問題2:啓動請求處理程序中的子過程:

exports.user = function(req,res){ 
    child = new cp.fork('./routes/mysort-module'); 

問題3:見問題1?

問題4:該過程返回計算結果後。

process.on('DONE', function(result) { 
    process.exit(); 
    // go on and send result to the client somehow... 
}); 
+0

感謝您的回答,我一定會給會議一個公平的考慮!並感謝分裂的建議,我也看到這是一個問題太多了!但是,我仍然不確定問題3,也許我沒有正確地形成我的q,我的問題是,是否可行或正確地爲每個請求啓動子進程?或者進程數量應該限制爲核心數量!?謝謝! – saigammar 2013-05-12 23:53:14

相關問題