繁体   English   中英

在事件队列被阻止时,Node.js服务器是否可以接受传入请求?

[英]Can a Node.js server accept incoming requests while the event queue is blocked?

所以我刚刚开始深入了解Node,我知道I / O是非阻塞的,并且事件循环是阻塞的,但我想知道的是:

如果您有阻止事件队列的代码,服务器是否仍然能够将传入的请求放在队列的末尾,或者所有这些请求都只是超时/反弹?

是。 服务器仍然可以排队请求。 为了演示,我制作了以下文件,它阻止了10秒,运行它,并在另一个终端上卷曲服务器。

require('http').createServer(function(req, res) {
  console.log('got a request!');
  res.end('hello world!\n');
}).listen(3000);

var t = Date.now();
console.log('blocking..');
while(t + 10000 > Date.now());
console.log('not blocking anymore');

运行它的结果

blocking..
not blocking anymore
got a request!

这与节点无关,或者至少这个讨论到目前为止没有引入节点行为的证据。

TCP堆栈本身接受连接到自己的队列,而无需使用接受套接字的程序的帮助。 如果该队列填满,则进一步请求等待TCP连接队列有空间。 这种“不可接受的”连接不会被反弹,但如果事情真的被推迟,他们可能会超时。

然而,最重要的是,使用curl的示例答案并不能证明TCP堆栈的基本行为之外的任何内容,但这可能并不重要,因为原始海报的关注点是连接可能会反弹。 只有当您的服务器过载(或编写得很糟糕)以至于它实际上已经过载时才会发生这种情况,并且转储某些请求是至少为某些用户提供某些服务的最佳机会。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM