问题:如果有个请求在处理复杂运算,发生阻塞了,后续请求还能进node服务吗?
一起来看下面的案例
const http = require('http');
const longComputation = () => {
let sum = 0;
for (let i = 0; i < 1e10; i++) {
sum += i;
};
return sum;
};
const server = http.createServer();
server.on('request', (req, res) => {
if (req.url === '/compute') {
console.info('计算开始',new Date());
const sum = longComputation();
console.info('计算结束',new Date());
return res.end(`Sum is ${sum}`);
} else {
res.end('Ok')
}
});
server.listen(3000);
启动后,先请求http://localhost:3000/compute,再请求http://localhost:3000/test,会发现在/compute接口响应之前,/test没有进入node服务,也不会正常响应。因为/compute接口在做复杂运算,阻塞了后续请求。所以如果还有人问你【如果有个请求在处理复杂运算,发生阻塞了,后续请求还能进node服务吗?】,你可以肯定的回答他【No】。