为什么settimeout阻塞eventloop

注意:对于那些关于settimeout的post,这不是一个复制的post,这里的关键答案是浏览器devise选项。

我开始研究node.js:一个简单的例子来testingasynchronous:

var http=require('http'); http.createServer( function(request, response){ response.writeHead(200); response.write("Hello, dog is running"); setTimeout( function(){ response.write("Dog is done"); response.end(); }, 10000 ); } ).listen(8080); console.log("Listen on port 8080") 

一个有趣的事情是它在命令lind和curl和浏览器中的行为是不一样的:在Ubuntu 12.10中,我在两个控制台中使用curl localhost:8080,它们在几乎相同的10个响应中响应。

但是,我打开了两个浏览器,几乎同时提出请求,但整个过程花了我20秒?

谢谢。

这是浏览器等待,而不是node.js

如果运行服务器并在两个选项卡中请求http://localhost:8080/ ,则需要20秒,因为浏览器在开始第二个请求之前等待第一个请求到同一个url。

如果运行服务器并在两个选项卡中请求http://localhost:8080/1http://localhost:8080/2 ,则需要10秒。