首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >. and /Express和并行队列

. and /Express和并行队列
EN

Stack Overflow用户
提问于 2014-02-28 22:34:45
回答 4查看 18.8K关注 0票数 18

我们正在构建一个以Node.js服务器和Express为特色的基础设施。

在服务器中,所发生的事情如下:

  1. 服务器接受来自客户端的传入HTTP请求。
  2. 服务器生成两个文件(此操作可以是“相对较长的”,也就是0.1秒左右)
  3. 服务器将生成的文件(每个文件~20-200 KB )上载到外部CDN。
  4. 服务器响应客户端,这包括CDN上文件的URI。

目前,服务器正在对每个请求进行顺序处理,并且工作得很好(Node/Express可以自动处理并发请求)。但是,随着我们计划增长,并发请求的数量可能会增加,我们认为最好实现一个用于处理请求的队列。否则,我们可能会有太多的任务同时运行和太多的开放连接到CDN。快速响应客户端不是一件相关的事情。

我想的是在Node服务器中有一个单独的部分,其中包含一些“工作人员”(2-3,但我们将进行测试以确定正确的同时操作数量)。因此,新的流应该是这样的:

  1. 在接受来自客户端的请求后,服务器向队列添加操作。
  2. 有2-3个工作人员(待测试)将元素从队列中取出并执行所有操作(生成文件并将它们上传到CDN)。
  3. 当工作人员处理了操作(如果它在队列中停留了相当长的时间并不重要),它会通知Node服务器(一个回调),并且服务器响应客户机(同时,客户机一直在等待)。

你觉得这种方法怎么样?你相信这是正确的吗?

最重要的是,如何在Node/Express中实现这一点?

谢谢您抽时间见我

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-03-07 23:30:33

(回答我自己的问题)

根据关于堆栈溢出的问题,在我的例子中,一个解决方案是使用Caolan McMahon异步模块实现队列。

主应用程序将创建作业并将它们推入队列,队列限制了可以运行的并发作业的数量。这允许同时处理任务,但有严格的限制控制。它的工作原理就像Cocoa在Mac上的NSOperationQueue一样。

票数 7
EN

Stack Overflow用户

发布于 2014-03-05 19:23:03

tldr;您可以使用本机Node.js 集群模块来处理许多并发请求。

一些序言: Node.js本身是单线程的。它的事件循环使得它能够很好地同时处理多个请求,即使在它的单线程模型中也是如此,这是它最好的特性之一。

的真正交易:,那么,我们怎样才能扩展这个范围,甚至处理更多并发的约定,并使用所有可用的CPU?和集群模块一起。

这个模块将完全按照@Qualcuno所指出的那样工作,这将允许您在主服务器后面创建多个工作人员(也称为进程),以共享负载,并更有效地使用CPU可用的功能。

根据Node.js的官方文件:

因为工作人员都是独立的进程,所以它们可以根据程序的需要被杀死或重新生成,而不会影响其他工作人员。只要还有一些工作人员还活着,服务器就会继续接受连接。

所需的示例:

代码语言:javascript
复制
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);
}

希望这就是你所需要的。

如果您有任何进一步的问题,请发表评论。

票数 32
EN

Stack Overflow用户

发布于 2014-03-03 17:07:48

为此,我将使用类似Heroku提供的带有Web/Worker Dynos (服务器)的结构。web服务器可以接受请求,并将信息传递给可以进行信息处理和上传的工作人员。我会让前端网站侦听一个套接字(socket.io)的外部CDN的网址,这将从工作人员在上传完成后发射。希望这是合理的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22107144

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档