node服务器,代码怎么写请求不会互相阻塞?
发布于 5 年前 作者 ooooevan 2844 次浏览 来自 问答

今天发现,不同用户之间或多个请求之间阻塞了,这样就不能并发了。如下面的代码,延迟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,不要老是碰浏览器,不是好习惯。

回到顶部