在事件队列被阻塞的时候,Node.js服务器可以接受传入的请求吗?

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

如果你有阻塞事件队列的代码,服务器是否仍然可以在队列尾部放置传入的请求,或者所有的请求都超时/反弹?

这与节点无关,或者至less这个讨论至今没有引入节点行为的证据。

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

但是底线是,使用curl的样本答案没有certificate超出TCP协议栈基本行为的任何内容,但这可能并不重要,因为原始的海报的关注是连接可能会反弹。 这只会发生在你的服务器如此过载(或者写得很糟糕)的时候才会被有效地重载,并且抛出一些请求是最有可能为某些用户提供服务的最好机会。

是。 服务器仍然能够排队请求。 为了演示,我做了下面的文件阻塞了10秒钟,运行它,并在另一个terminalcurl'd服务器。

 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!