node.js的配置+表达大量传入请求的队列

GJa*_*ain 1 node.js express

我有一个特殊的/奇怪的要求,我需要执行以下操作:

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

由于它是一项sync操作,因此它将阻止事件循环,我担心node.js / express将开始删除http请求。

对于短期解决方案:

  • node.js / express中是否有传入请求的队列/限制?
  • 有什么配置可以用来增加队列大小吗?
  • 如果事件循环被阻止,node.js / express会发出退回请求吗?

And*_*ers 5

当节点的事件循环受阻时,您的服务仍将接受传入连接,但express 无法响应任何内容。传入的请求将作为基础TCP实现的一部分排队。

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

就用于将传入请求排队的内存而言,可能存在虚拟限制,但这只是基础TCP堆栈的详细信息,而不是node.js。

有什么配置可以用来增加队列大小吗?

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

如果事件循环被阻止,node.js / express会发出退回请求吗?

不可以,因为在事件循环被阻止的情况下,node.js / express的底层I / O不会使您收到的输入消息反弹。在达到某些已配置的TCP连接限制之前,您的请求不会被退回。但是您真的不希望它被阻止。

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