请求调用如何在NodeJ / ExpressJ中工作?

Balexandre

随着我对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:3000127.0.0.1:3000,看看它们是否在同一时间结束。这可能是您的浏览器将打开的连接限制为同一资源。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用NodeJ中的请求进行多个API调用?

加法在ExpressJ中无法正常工作,其中减法在正常工作

如何在Python中调用sudo密码请求

如何在请求调用中添加持久头?

如何在Retrofit 2中同时调用多个请求

如何在改造android中调用动态请求方法

如何在ajax json请求中调用URL

如何处理NodeJ中的多个并行请求

如何使用expressJ将JS,CSS和其他服务器端实用程序包含到NodeJ中的HTML页面中?

如何在提取请求链中递归调用单个提取请求

如何在NodeJ中创建动态对象名称

无效请求如何在AWS Cloudfront中工作?

如何在Fragment中调用OnActivityResult以及它如何工作?

NodeJ和ExpressJ无法设置Cookie

如何在MEAN应用中的同一HTTP请求中调用多种方法

接口变量如何在JAVA中工作并调用接口方法?

如何在工作流中调用流程

如何在工作表中调用VBA函数?

带参数的函数调用如何在C中工作?

如何在请求结束时在generic.view中调用自定义方法

如何在请求HTTPS调用中禁止有关缺少证书验证的警告?

如何在WordPress Rest API调用中设置请求标头

如何在包含后请求API调用的python中并行化for循环?

如何在sails.js 中对API 请求调用自定义控制器?

如何在Web API中捕获请求和响应数据调用?

如何在可取消请求流中重复使用单个异步 Web 服务调用?

如何在 Amcharts 中单击地图气泡并调用服务器请求

如何在GitHub Actions工作流程中获取请求请求编号

如何在Cakephp 3中的ajax调用中定义CSRF令牌。以及如何为某些ajax请求关闭CSRF