处理多个并发请求 Express [重复]

Posted

技术标签:

【中文标题】处理多个并发请求 Express [重复]【英文标题】:Handle Multiple Concurent Requests Express [duplicate] 【发布时间】:2018-09-25 15:37:00 【问题描述】:

我开始使用 Node Js 和 Express 创建一个 webapi。

然后出现以下问题:

如果我有一个可以处理/ 请求的函数,例如:

router.get('/', (req, res, next) => 
  pool.query("select * from users").then((data) => 
    setTimeout(() => 
      res.json(data.rows);
    , 5000);
  ).catch((err) => 
    res.json(
      error: err
    );
  );
);

考虑到数据库查询花费的时间比预期的要长,其他用户能否同时请求相同的路由?还是 express 阻止它,直到它对第一个请求有响应?

**then() 块内的超时函数只是为了说明我的意思。

【问题讨论】:

在What is non-blocking or asynchronous I/O in Node.js? 和Node.js - single thread, non-blocking? 之前被问过很多次,仅举几例。更广泛的互联网上有大量更详细的解释。 【参考方案1】:

其他用户将能够同时请求相同的路线。

Node/Express 自动处理并发请求。 它们在事件驱动模型中运行,这意味着没有任何阻塞,一切都同时运行。 javascript 是单线程的,因此每个程序都在单个内核上运行,但每一行代码都可以在不等待任何返回的情况下执行。

【讨论】:

是的,问题是当我放置一个超时函数并尝试在超时前连续两次获取数据时,这两个请求需要两倍于指定的超时时间,并且应该多花一点时间不止一个,不是吗?因为如果第一个请求开始并需要 10 秒执行,而在 1 秒后第二个请求开始并且也需要 10 秒。执行这两个请求应该需要 10+1 秒,但实际上需要 10+1+10 秒...

以上是关于处理多个并发请求 Express [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Express 请求处理程序中编写非阻塞异步函数 [重复]

如何在 Express 请求处理程序中编写非阻塞异步函数 [重复]

NodeJS/Express 如何同时处理多个 CPU 绑定请求

如何优雅地处理重复(并发)请求?

Nodejs 中的并发

后端处理高并发状态的多次重复请求