我有一个特殊的/奇怪的要求,我需要执行以下操作:
app.put('/example/:entity', function(req, res, next) {
fs.writeFileSync(someFile);
});
Run Code Online (Sandbox Code Playgroud)
由于它是一项sync操作,因此它将阻止事件循环,我担心node.js / express将开始删除http请求。
对于短期解决方案:
当节点的事件循环受阻时,您的服务仍将接受传入连接,但express 无法响应任何内容。传入的请求将作为基础TCP实现的一部分排队。
node.js / express中是否有传入请求的队列/限制?
就用于将传入请求排队的内存而言,可能存在虚拟限制,但这只是基础TCP堆栈的详细信息,而不是node.js。
有什么配置可以用来增加队列大小吗?
我认为您可以降低操作系统设置中的TCP连接上限,以防止服务器容易过载。我认为增加它是对您的问题的错误解决方案(请参见下文)。
如果事件循环被阻止,node.js / express会发出退回请求吗?
不可以,因为在事件循环被阻止的情况下,node.js / express的底层I / O不会使您收到的输入消息反弹。在达到某些已配置的TCP连接限制之前,您的请求不会被退回。但是您真的不希望它被阻止。
坦率地说,阻塞node.js中的事件循环几乎总是一个坏主意。而且总有办法解决。在您的情况下,如果您需要连续写入该文件,请尝试将事件推送到后端队列中,您可以将其配置为一次处理一个事件,而不会阻塞工作。kue + redis是一个不错的选择。
| 归档时间: |
|
| 查看次数: |
2104 次 |
| 最近记录: |