随着我对NodeJ的了解越来越多(我来自C#世界),我做了一个非常简单的测试,因此我可以了解expressJs请求处理流程如下:
const express = require('express');
const uuid = require('uuid');
const app = express();
const doSomething = (res, start, id) => {
const time = Date.now() - start;
console.log(`request ${id} processed and took ${time}ms`);
res.status(200).send({ id, took: `${time}ms` });
};
app.get('/', (req, res) => {
const id = uuid.v4();
const start = Date.now();
console.log(`request [1] accepted for ${id}`);
setTimeout(() => doSomething(res, start, id), 10000);
});
app.get('/2', (req, res) => {
const id = uuid.v4();
const start = Date.now();
console.log(`request [2] accepted for ${id}`);
setTimeout(() => doSomething(res, start, id), 5000);
});
app.listen(3000);
然后我打开浏览器3次,然后转到localhost:3000
,然后localhost:3000/2
在第四个选项卡中打开...
我得到的输出是这样的:
> node .\index.js
request [1] accepted for 1c928996-484d-4658-b56a-620b9c1e4060
request [2] accepted for 13d564e1-4137-4c56-9bae-b106682cbed3
request 13d564e1-4137-4c56-9bae-b106682cbed3 processed and took 5001ms
request 1c928996-484d-4658-b56a-620b9c1e4060 processed and took 10002ms
request [1] accepted for 1b64f39c-8406-4edf-a887-533cd9e8abf0
request 1b64f39c-8406-4edf-a887-533cd9e8abf0 processed and took 10002ms
request [1] accepted for 5c77656f-2105-4d65-b40e-ae0cc86e96a4
request 5c77656f-2105-4d65-b40e-ae0cc86e96a4 processed and took 10001ms
我意识到的是,第二个和第三个浏览器选项卡只是等待,直到第一个和第二个请求结束(因为它是同一个端点),但是第四个选项卡被作为新请求处理...
是否可以在异步情况下处理每个请求,因此第二个请求和第三个请求仅花费10秒的等待时间,而在处理前一个请求后仅花费10秒?
我只是想知道在生产中,如果对API的内部调用对他们来说需要更长的处理时间(或可能达到30秒超时),我是否不想让所有后续调用都等待该调用结束。 。
有什么办法吗?
尝试按localhost:3000
和127.0.0.1:3000
,看看它们是否在同一时间结束。这可能是您的浏览器将打开的连接限制为同一资源。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句