node.js + express的配置,用于传入请求的大队列

时间:2015-05-26 02:31:25

标签: node.js express

我有一个特定/奇怪的要求,我需要做这样的事情:

app.put('/example/:entity', function(req, res, next) {
     fs.writeFileSync(someFile);
});

由于它是sync操作,它将阻止事件循环,我担心node.js / express将开始丢弃http请求。

短期解决方案:

  • node.js / express中是否有任何传入请求的队列/限制?
  • 我是否可以使用任何配置来增加队列大小?
  • 如果事件循环被阻止,node.js /表示退回请求吗?

1 个答案:

答案 0 :(得分:5)

您的服务仍然会在节点的事件循环被阻止时接受传入连接,但 express 无法响应任何事情。传入的请求将作为底层TCP实现的一部分排队。

  

node.js / express中是否有任何传入请求的队列/限制?

在用于对传入请求进行排队的内存方面可能存在虚拟限制,但这是底层TCP堆栈的详细信息,而不是node.js。

  

我是否可以使用任何配置来增加队列大小?

我认为你可以破坏操作系统设置中的TCP连接上限,以防止服务器轻易过载。我认为增加它是你的问题的错误解决方案(见下文)。

  

如果事件循环被阻止,node.js /表示退回请求吗?

不,因为它的I / O在引擎盖下,node.js / express不会在事件循环被阻止时弹出你得到的传入requets。在您达到某个已配置的TCP连接限制之前,您的请求将不会被退回。但你真的不希望它被阻止。

坦率地说,阻止node.js中的事件循环几乎总是一个坏主意。而且总是有办法解决它。在您的情况下,如果您需要将该文件串行编写,请尝试将事件推送到后端队列,您可以将其配置为一次处理一个事件而不会阻塞工作。 kue + redis是一个很好的选择。