node.js - Node.js 每 10 秒 10000 个并发 HTTP 请求
问题描述
我有一个用例,我需要每 10 秒在无限循环中发出超过 10,000 个外部 HTTP 请求(对一个 API)。这个 API 需要 200-800 毫秒的响应时间。
目标:
- 10秒内调用外部API超过10000次
- 拥有一个可以一次运行数月而不会失败的防故障轮询系统
尝试:我尝试使用Async库并将请求限制为 300 个并发调用(更高的数字很快失败)但是在大约 300,000 个请求之后我遇到了错误,我收到连接被拒绝(我在另一个端口上调用本地节点服务器) . 我正在运行本地服务器来模拟真实的 API,因为我们的应用程序尚未扩展到超过 10,000 个用户,并且外部 API 每个请求需要 1 个唯一用户。本地响应服务器是一个非常简单的 Node 服务器,它有一个等待 200-800 毫秒响应的路由。
我收到此错误是因为我正在调用在我的机器上本地运行的服务器,还是因为 Node 在处理这么多请求时遇到问题?任何有关执行此类轮询的最佳方式的见解将不胜感激。
编辑:我的问题是关于如何创建一个可以在 10 秒间隔内发送超过 10,000 个请求的客户端。
编辑2:客户:
//arr contains 10,000 tokens
const makeRequests = arr => {
setInterval(() => {
async.eachLimit(arr, 300, (token, cb) => {
axios.get(`http://localhost:3001/tokens/${token}`)
.then(res => {
//do something
cb();
})
.catch(err => {
//handle error
cb();
})
})
}, 10000);
}
虚拟服务器:
const getRandomArbitrary = (min, max) => {
return Math.random() * (max - min) + min;
}
app.get('/tokens:token', (req, res) => {
setTimeout(() => {
res.send('OK');
}, getRandomArbitrary(200, 800))
});
解决方案
推荐阅读
- javascript - React app web app 给出 404 错误和 Uncaught in Promise 错误
- java - 如何调整自定义日历的网格视图
- android - Android startForegroundService/startService 实际上并没有启动 Intent/Service?
- authentication - 在某些请求上出现 (401) UnAuthorized 错误,不是全部,而是大多数
- python - 如何在Python中Concat()具有1行的数据框和具有多行的数据框
- opencv - 边缘检测中边缘周围最亮的像素
- flutter - Flutter:用 for 循环说明字符串列表不起作用
- c# - C# 是否有一个“规则”,我可以在枚举上设置它中的每个项目都必须具有特定的属性
- embedded - STM32 Nucleo EEPROM 仿真器 ee_init 问题
- c - 我应该如何返回结构指针?