NodeJS/Express 不是异步的
NodeJS/Express not asynchronous
你能提示一下为什么 express 一次处理一个请求吗?我觉得它应该可以一次做多个。
const express = require('express');
const app = express();
var count = 0;
app.get('/', (req, res) => {
count++;
if (count > 1) {
console.log('concurrent!');
debugger;
}
console.log(count);
count--;
res.send('Hello World!');
});
app.listen(1333, () => console.log('Example app listening on port 1333!'));
无论如何,我从来没有遇到过调试器的情况。
尝试使用 ab:
发送多个请求
ab -n 100 -c 100 -m GET localhost:1333/
他们总是在等着对方...
Node "single thread",我的意思是Node的事件循环是单线程的,跟express没有关系。只有 "IO" 是异步管理的,如数据库查询、文件读取等...
这里有没有 IO 的基本代码,因此每个请求都被一个接一个地处理,并且将按照启动的顺序完成。如果你有异步调用就不会这样了。
您可以查看这篇文章了解更多详情:https://nodejs.org/en/docs/guides/event-loop-timers-and-nexttick/
你能提示一下为什么 express 一次处理一个请求吗?我觉得它应该可以一次做多个。
const express = require('express');
const app = express();
var count = 0;
app.get('/', (req, res) => {
count++;
if (count > 1) {
console.log('concurrent!');
debugger;
}
console.log(count);
count--;
res.send('Hello World!');
});
app.listen(1333, () => console.log('Example app listening on port 1333!'));
无论如何,我从来没有遇到过调试器的情况。 尝试使用 ab:
发送多个请求ab -n 100 -c 100 -m GET localhost:1333/
他们总是在等着对方...
Node "single thread",我的意思是Node的事件循环是单线程的,跟express没有关系。只有 "IO" 是异步管理的,如数据库查询、文件读取等...
这里有没有 IO 的基本代码,因此每个请求都被一个接一个地处理,并且将按照启动的顺序完成。如果你有异步调用就不会这样了。
您可以查看这篇文章了解更多详情:https://nodejs.org/en/docs/guides/event-loop-timers-and-nexttick/