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

我正在使用nodejs和expressjs框架实现一个非常基本的网站。 这个想法是,用户进入网站,点击一个button,将在服务器中触发一个cpu密集型任务,并在完成任务后在浏览器上获取消息。

我感到困惑的是如何为每个用户完成这个任务,而不阻塞事件循环,因此,没有用户需要等待另一个完成。 另外,如何为每个用户使用已用资源的新实例(对象,variables..)。

玩完和阅读后,我碰到了孩子的过程。 基本上,我想为每个用户分派一个新的child_process,这样无论sorting需要多less时间,它都不会阻塞我的事件循环。 不过,我还不确定这是否是这种情况下最好的做法。

现在,我已经做了我想做的事情,但只有一个用户,但是当尝试启动另一个用户时,事情变得混乱,variables被共享。 我知道我不应该使用在模块中声明的全局variables,但是可以通过另一种方式使variables在单个模块中的函数之间共享,但是对于每个用户它们是不同的!

我知道这个问题可能听起来很基本,但我有点想念节点js是如何为不同的用户提供新的variables,与每个用户相关的对象。

总之,我的问题是:1-节点如何同时为多个用户服务? 我什么时候该如何分stream或执行一个新的subprocess,并且是每个用户还是基于cpu中的我的#个核心?如何分离我的应用程序中每个用户的资源,使得每个用户用户有他自己的计数器,电子邮件和其他对象和variables。 4-我什么时候需要,或者我必须杀死我的subprocess。

提前致谢。

码:

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 } 

在我的分拣模块中:

 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:全局variables不限于请求范围。 这是Node对全局的定义的一部分,以某种方式执行此操作是没有意义的。 你根本不应该使用全局variables。

请求范围由HTTP模块提供:

 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.doThat(),则改变C调用A.doThis(G)和B.doThat(G )来代替。 为G的所有事件做这个,并把它的范围缩小到本地或请求。

此外,如果您需要一个范围覆盖来自一个客户端的多个请求,请查看“会话”。

问题2:在请求处理程序中启动subprocess:

 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... });