为什么settimeout阻止eventloop

时间:2013-04-06 14:18:20

标签: node.js

注意:这不是关于settimeout的复制帖子,这里的关键答案是浏览器设计选项。

我正在开始学习node.js: 测试异步的一个简单示例:

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") 

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

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

感谢。

1 个答案:

答案 0 :(得分:19)

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

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

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