处理多个并发请求 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 请求处理程序中编写非阻塞异步函数 [重复]