node服务器,代码怎么写请求不会互相阻塞?
今天发现,不同用户之间或多个请求之间阻塞了,这样就不能并发了。如下面的代码,延迟5秒模拟数据库
const Koa = require('koa');
const app = new Koa();
app.use(async ctx => {
return new Promise(resolve => {
setTimeout(() => {
ctx.body = 'Hello Koa';
resolve()
}, 5000)
})
});
app.listen(3002);
浏览器同时开启两个标签页,一个用时5.01秒,另一个9.72秒。很明显后面的被前面的阻塞了。所以我想问怎么写才能两个都5秒? 还有一点,为什么第二个不是大于10秒? 不是很清楚,希望大家解答
7 回复
好像是浏览器问题 你试试用两个浏览器
你是怎么确定那两个时间点的?
@yuu2lee4 确实是!我用两个浏览器就没问题,请问为什么会这样
@weiketa 我就是看控制台,手动刷新两个标签页
应该是这个了,浏览器对相同请求的串化 https://cnodejs.org/topic/50cde5b9637ffa4155864c96
只有 chrome 貌似才会遇到这个问题,这并不是服务端的阻塞,egg 有一个 issue 好像是类似的问题,可以看下:https://github.com/eggjs/egg/issues/3046
测试一律用 curl 或 supertest,不要老是碰浏览器,不是好习惯。