首页 > 解决方案 > NodeJs/Express 请求被 SetTimeout 阻止?

问题描述

在下面的示例中,我在返回响应之前引入了 10 秒的人为延迟。

但是,如果我在两个单独的选项卡中并行打开页面,则第二个请求将被阻止并且在第一个请求完成之前不会开始处理。换句话说,直到第一个请求完全完成(10 秒后)后,才会显示第二个“输入方法”。

为什么第二个请求被阻止?我认为 NodeJs 不应该在异步代码运行时阻塞。

app.get('/', function (req, res) {
    console.log('entering method');

    setTimeout(() => {
        res.send('hello world');
    }, 10000);
});

标签: node.jsexpressasynchronous

解决方案


许多浏览器限制对同一服务器的并发请求数。这是浏览器限制,而不是 Node.js 限制。

尝试使用curl,您会看到请求没有被阻止。

curl http://localhost:{port} &
curl http://localhost:{port} &

或使用 apache 基准测试:

ab -n 10 -c 2 http://localhost:{port}

推荐阅读