如何让我的nodejs应用程序服务于多个用户?

问题描述:

我正在使用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. 

你应该尝试拆分你的问题。但是,我希望这可以回答。

问题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