【问题标题】:Handle Multiple Concurent Requests Express [duplicate]处理多个并发请求 Express [重复]
【发布时间】: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() 块内的超时函数只是为了说明我的意思。

【问题讨论】:

标签: javascript node.js rest api express


【解决方案1】:

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

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

【讨论】:

  • 是的,问题是当我放置一个超时函数并尝试在超时前连续两次获取数据时,这两个请求需要两倍于指定的超时时间,并且应该多花一点时间不止一个,不是吗?因为如果第一个请求开始并需要 10 秒执行,而在 1 秒后第二个请求开始并且也需要 10 秒。执行这两个请求应该需要 10+1 秒,但实际上需要 10+1+10 秒...
猜你喜欢
  • 1970-01-01
  • 2021-08-01
  • 2014-12-17
  • 2019-02-08
  • 1970-01-01
  • 1970-01-01
  • 2020-12-20
  • 2018-01-19
  • 2017-10-15
相关资源
最近更新 更多