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