node.js - NodeJs/Express 请求被 SetTimeout 阻止?
问题描述
在下面的示例中,我在返回响应之前引入了 10 秒的人为延迟。
但是,如果我在两个单独的选项卡中并行打开页面,则第二个请求将被阻止并且在第一个请求完成之前不会开始处理。换句话说,直到第一个请求完全完成(10 秒后)后,才会显示第二个“输入方法”。
为什么第二个请求被阻止?我认为 NodeJs 不应该在异步代码运行时阻塞。
app.get('/', function (req, res) {
console.log('entering method');
setTimeout(() => {
res.send('hello world');
}, 10000);
});
解决方案
许多浏览器限制对同一服务器的并发请求数。这是浏览器限制,而不是 Node.js 限制。
尝试使用curl
,您会看到请求没有被阻止。
curl http://localhost:{port} &
curl http://localhost:{port} &
或使用 apache 基准测试:
ab -n 10 -c 2 http://localhost:{port}
推荐阅读
- python - 如何使用 python tkinter 接受用户输入并使用 selenium Web 自动化将其输入到浏览器结帐中?
- ag-grid - 在 ag-grid 中使用树数据时,可编辑列组不更新文本
- javascript - 是否有按名称访问元素的 css 计数器变量的 javascript 简写?
- laravel - FullCalendar - 无法检索 json 数据,并在日历上显示事件
- pandas - pandas_udf 错误(applyInPandas)说明元组格式
- regex - 我一直在尝试将特定路径中的所有 url 重定向为小写
- typescript - 使用重载函数处理联合,该函数在单个重载中不处理整个联合
- javascript - 如何优化数据结构以读取 mongo 或 sql 到客户端
- r - 如何为某个单元格中的多个个体制作二进制变量?
- html - 导航栏的引导响应调整大小问题