【发布时间】:2021-08-01 03:25:31
【问题描述】:
完全披露:我是 nodeJS 初学者。
目的:使用 async-await 测试 NodeJS 同时快速处理多个请求,同时在 Promise 上被阻塞。
测试策略:使用 async get 创建一个简单的 nodeJS express 服务器。打开调用同一端口的两个浏览器选项卡。尽管是异步的,但两个浏览器请求都是按顺序处理的。
代码:
const express = require('express')
const app = express()
var i=0;
async function sleep(ms) {
console.log("inside sleep now")
return new Promise((resolve) => {
setTimeout(resolve, ms)
});
}
app.get('', async (req, res) => {
i++
console.log('Got new request. i count:' + i)
console.log('Thread i:' + i + ' starting to sleep')
await sleep(10000).then((resolve) => {
console.log('I am resolved now')
res.send('Hello Express')
})
console.log('Thread i:' + i + ' awake from sleep')
})
观察到的结果:尽管异步等待,但当我使用选项卡打开第二个浏览器时,直到第一个线程唤醒,我看不到第二个浏览器请求的请求日志。
问题: 我错过了什么?可以表示不同时处理两个浏览器请求,同时被承诺阻止,尽管 async-await。我一定是遗漏了一些东西,因为我知道 nodeJS 在单线程时可以通过优化等待时间来处理多个请求。
【问题讨论】:
-
答案below 是正确的,该代码是非阻塞的,但没有解释为什么您会看到观察到的行为。请参阅Node Express does not handle parallel requests 了解可能的原因,即客户端正在停止后续请求。在同一个浏览器中尝试两个不同的浏览器而不是不同的选项卡,它应该是并行的。
-
@esqew 谢谢,但这并不能回答问题。 Node Express does not handle parallel requests 应该是正确的欺骗目标。
标签: javascript node.js express asynchronous async-await