首页 > 解决方案 > 在同一端点 API 上处理 Express Sever 的多个并发请求

问题描述

这个问题可能会重复,但我仍然没有得到答案。我对 node.js 还很陌生,所以我可能需要一些帮助。许多人说 node.js 可以完全自由地异步运行传入的请求,但下面的代码显示,如果多个请求到达同一个端点,比如/test3,回调函数将:

  1. 打印“test3”
  2. 调用 setTimeout() 防止事件循环阻塞
  3. 等待 5 秒,然后向客户端发送“test3”的响应

我这里的问题是,如果客户端 1 和客户端 2 同时调用/test3端点,这里的假设是客户端 1 首先命中端点,客户端 2 必须等待客户端 1 先完成才能进入事件循环。

这里的任何人都可以告诉我,多个客户端是否可以调用单个端点并同时运行,而不是按顺序运行,而是类似于每个连接 1 个线程的类比。

当然,如果我在代码仍在/test3上执行时调用其他端点/test1/test2,我仍然会直接从/test2获得响应,即“test2”。

app.get("/test1", (req, res) => {
  console.log("test1");
  setTimeout(() => res.send("test1"), 5000);
});

app.get("/test2", async (req, res, next) => {
  console.log("test2");
  res.send("test2");
});

app.get("/test3", (req, res) => {
  console.log("test3");
  setTimeout(() => res.send("test3"), 5000);
});

标签: javascriptnode.jsexpress

解决方案


这个问题需要更多细节才能回答,显然是一个基于意见的问题。只是因为这是一个稻草人的论点,我会回答它。

首先我们需要定义run concurrently,如果我们假设严格理论中的字面意思是不明确的,那就是nothing CONCURRENTLY

CPU 一次只能执行一条指令。

CPU 执行指令的速度称为时钟速度。这是由时钟控制的。随着时钟的每一个滴答声,CPU 获取并执行一条指令。时钟速度以每秒周期数来衡量,1c/s 被称为1 赫兹。这意味着时钟速度为2 吉赫 (GHz)的 CPU 可以为我们其他人/世界每秒 20 亿个周期 执行2 亿次(或美国为 20 亿次)。cpu“同时”运行多个任务

是的,您现在是计算机,甚至手机都带有多核,这意味着同时运行的任务数量将取决于内核的数量,但是如果您问任何专家,例如这位 助理工程师,我会告诉您,您很少会找到具有多个内核的服务器。如果您可以使用 kubernetes 生成一堆 ...nano 或免费试用中可用的任何选项,您为什么要花 500 美元购买多核服务器。

另一件事。你为什么要处理/配置节点来负责路由让 apache 和/或 nginx 担心这一点。

正如你所提到的,有一个叫做事件循环的东西,它是一种命名队列数据结构FIFO的奇特方式

换句话说。不,不会运行nodejs 以及任何其他编程语言

但绝对取决于您的基础设施。


推荐阅读