需要澄清 Node/Express 如何并发处理 HTTP 请求以及如何防止超时

Clarification needed on how Node/Express processes HTTP requests concurrently and how to prevent timeouts

提问人:Vishal 提问时间:4/11/2023 更新时间:4/11/2023 访问量:11

问:

我阅读了这篇文章 https://www.freecodecamp.org/news/nodejs-eventloop-tutorial/ 解释了 Node 的工作原理。本文的亮点是异步任务是在同步任务完成后进行处理

这让我想到,当服务器收到大量请求时,节点请求会开始超时吗?

例如:

 app.post('/createUser', (req, res) => {
        // synchronous tasks like validating user information
        const name = req.body.name
        if (name===null) {
           return res.send("INVALID_NAME")
        }

        // asynchronous task of saving to SQLite db
        db.exec("*Insert into table SQL Statement*", (err,data) => {
              return res.send("SUCCESS")
        })
  })

在上面的例子中:由于位于回调队列中,其处理可能会被新的传入请求延迟,因为调用堆栈和同步代码具有优先级。(err,data) => {return res.send("SUCCESS")})

请求是否可以在上面的代码中开始超时,因为在从调用队列中获取项目之前,新请求将处理调用堆栈中的数据?有什么更好的方法可以做到这一点?

节点.js Express 回调

评论

0赞 slebetman 4/11/2023
是的,它可以超时,但它的限制非常高。Express 可以毫不费力地每秒轻松处理大约 2000 个请求。通过少量优化(例如缓存常见响应),每秒 10000 个请求不是问题。在你真正达到 HTTP 超时之前,你可能会用完 RAM(而且 Express 相当依赖 RAM 使用,其中 Java 通常使用 1GB,Express 通常使用 30MB)
0赞 Vishal 4/11/2023
@slebetman,由于无法将新插入的结果缓存到数据库中,如何使这段代码不容易超时?
0赞 Vishal 4/11/2023
@slebetman如何使它不容易耗尽内存

答: 暂无答案