我们正在构建一个以Node.js服务器和Express为特色的基础设施。
在服务器中,所发生的事情如下:
目前,服务器正在对每个请求进行顺序处理,并且工作得很好(Node/Express可以自动处理并发请求)。但是,随着我们计划增长,并发请求的数量可能会增加,我们认为最好实现一个用于处理请求的队列。否则,我们可能会有太多的任务同时运行和太多的开放连接到CDN。快速响应客户端不是一件相关的事情。
我想的是在Node服务器中有一个单独的部分,其中包含一些“工作人员”(2-3,但我们将进行测试以确定正确的同时操作数量)。因此,新的流应该是这样的:
你觉得这种方法怎么样?你相信这是正确的吗?
最重要的是,如何在Node/Express中实现这一点?
谢谢您抽时间见我
发布于 2014-03-07 23:30:33
(回答我自己的问题)
根据关于堆栈溢出的问题,在我的例子中,一个解决方案是使用Caolan McMahon异步模块实现队列。
主应用程序将创建作业并将它们推入队列,队列限制了可以运行的并发作业的数量。这允许同时处理任务,但有严格的限制控制。它的工作原理就像Cocoa在Mac上的NSOperationQueue一样。
发布于 2014-03-05 19:23:03
tldr;您可以使用本机Node.js 集群模块来处理许多并发请求。
一些序言: Node.js本身是单线程的。它的事件循环使得它能够很好地同时处理多个请求,即使在它的单线程模型中也是如此,这是它最好的特性之一。
的真正交易:,那么,我们怎样才能扩展这个范围,甚至处理更多并发的约定,并使用所有可用的CPU?和集群模块一起。
这个模块将完全按照@Qualcuno所指出的那样工作,这将允许您在主服务器后面创建多个工作人员(也称为进程),以共享负载,并更有效地使用CPU可用的功能。
根据Node.js的官方文件:
因为工作人员都是独立的进程,所以它们可以根据程序的需要被杀死或重新生成,而不会影响其他工作人员。只要还有一些工作人员还活着,服务器就会继续接受连接。
所需的示例:
var cluster = require('cluster');
var http = require('http');
var numCPUs = require('os').cpus().length;
if (cluster.isMaster) {
// Fork workers.
for (var i = 0; i < numCPUs; i++) {
cluster.fork();
}
cluster.on('exit', function(worker, code, signal) {
console.log('worker ' + worker.process.pid + ' died');
});
} else {
// Workers can share any TCP connection
// In this case its a HTTP server
http.createServer(function(req, res) {
res.writeHead(200);
res.end("hello world\n");
}).listen(8000);
}希望这就是你所需要的。
如果您有任何进一步的问题,请发表评论。
发布于 2014-03-03 17:07:48
为此,我将使用类似Heroku提供的带有Web/Worker Dynos (服务器)的结构。web服务器可以接受请求,并将信息传递给可以进行信息处理和上传的工作人员。我会让前端网站侦听一个套接字(socket.io)的外部CDN的网址,这将从工作人员在上传完成后发射。希望这是合理的。
https://stackoverflow.com/questions/22107144
复制相似问题