Ita*_*Ale 15 queue concurrency node.js express
我们正在构建一个具有Node.js服务器和Express的基础架构.
在服务器中,发生的事情如下:
目前,服务器按顺序为每个请求执行此操作,这非常有效(Node/Express可以自动处理并发请求).但是,随着我们计划增长,并发请求的数量可能会增加,我们认为实现队列处理请求会更好.否则,我们可能会面临同时运行太多任务以及与CDN打开过多连接的风险.快速响应客户并不是一件相关的事情.
我在想的是在节点服务器中有一个单独的部分,其中包含一些 "工作者"(2-3,但我们将进行测试以确定正确的同时操作数).所以,新流程看起来像:
您如何看待这种方法?你认为这是正确的吗?
最重要的是,如何在Node/Express中实现?
感谢您的时间
dio*_*ney 28
tldr; 您可以使用本机Node.js 群集模块来处理大量并发请求.
一些序言: Node.js本身是单线程的.它的事件循环使它非常适合同时处理多个请求,即使在它的单线程模型中也是如此,这是IMO的最佳功能之一.
真正的交易: 那么,我们如何扩展它以处理更多的并发连接并使用所有可用的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);
}
Run Code Online (Sandbox Code Playgroud)
希望这是你需要的.
如果您有任何其他问题,请评论.
(回答我自己的问题)
根据Stack Overflow上的这个问题,在我的案例中,解决方案是使用Caolan McMahon的异步模块实现队列.
主应用程序将创建作业并将其推入队列,该队列可以运行的并发作业数量有限制.这允许同时处理任务,但严格控制限制.它在Mac OSX上像Cocoa的NSOperationQueue一样工作.