Node.js阻塞了吗?

Ada*_*dam 1 javascript http blocking node.js

我想我刚刚发现了一些与node.js或浏览器相关的东西.所以node.js应该是非阻塞的,但是一个简单的setTimeout阻塞了同一个客户端的整个网站.

这是服务器代码:

// Create HTTP Server
var http = require('http');

// Create page number holder
var page = 0;

http.createServer(function (req, res) {
    // Increment Page Number
    page++; 

    // Log page load
    console.log('LOAD PAGE', page); 

    // Set response header
    res.writeHead(200, {'Content-Type': 'text/plain'}); 

    // Wait 10 seconds and write Hello World message to client.
    setTimeout(function(){ res.end('Hello World\n'); }, 10000); 

}).listen(5000); // Listen on port 5000

// Log server start
console.log('Server running on port 5000.');
Run Code Online (Sandbox Code Playgroud)

所以我所说的是当我尝试使用两个选项卡在Chrome(版本25.0.1364.152)中打开http://mysite.com:5000/时,第一个选项卡必须在节点处理第二个选项卡之前完成.js文件.

它看起来像这样:

Client: Open Tab1 
> server console: LOAD PAGE 1

Client: Open Tab2
> server console: Nothing happens

Server: Wait 10 seconds
> server console: LOAD PAGE 2
Run Code Online (Sandbox Code Playgroud)

我希望node.js能够立即运行这两个请求,否则这不是非阻塞的.我已经使用Firefox 19对此进行了测试,因此浏览器的行为似乎与此相同.

那么发生了什么?我错过了什么?:OOOO

UPDATE

我只是在Safari(6.0.2)中运行测试并且它正常工作,因此这可能是Chrome和Firefox以及其他人的浏览器问题.

使用Node.js版本v0.6.17和v0.8.21进行测试

Roe*_*den 12

浏览器实现每个域名的并发连接限制.剪断:

浏览器通常将每台服务器的并发HTTP连接数限制为2(为简单起见,此处广泛使用术语"每服务器".例如,它可能是共享相同公共IP的多台物理机器.)浏览器会话已经有两个HTTP连接,任何进一步的连接请求都必须等到这两个HTTP连接中的一个完成.结果,浏览器(或应用程序)似乎被锁定.虽然"两个连接限制"在几年前有道理,它在今天的Ajax启用的"web 2.0"应用程序中是非常有问题的.

资料来源:http://www.openajax.org/runtime/wiki/The_Two_HTTP_Connection_Limit_Issue

节点没有阻塞,你的浏览器是.我建议使用apache基准测试(ab -c 10 -n 10)进行测试.