如何解决如何在NodeJS中优化HTTP轮询?
我正在开发一个NodeJS服务,该服务连续轮询REST API,以近实时地获取大量资源的状态变化。没有其他协议可用。
轮询间隔为5秒。资源数量通常在100-500之间,因此请考虑:
- 通常它每秒执行50个HTTP请求
- 响应通常需要5秒钟以上,因此对同一请求的请求可能会重叠
通常,平均负载超过8.00(在8核vm中)和/或应用崩溃。
在处理此工作负载时,我想确保资源使用尽可能少。
这就是我所做的:
- HTTP2可用(但axios不支持吗?)
- 设置
process.env.UV_THREADPOOL_SIZE = 8
- 使用axios库发出异步请求
- 为所有请求重用同一axios实例
- 使用具有保持活动状态的HTTPSAgent
相关代码:
'use strict'
process.env.UV_THREADPOOL_SIZE = 8
const axios = axios.create({
baseURL: 'https://api.example.com',httpsAgent: new HTTPS.Agent({
keepAlive: true,//maxSockets: 256,//maxFreeSockets: 128,scheduling: 'fifo',timeout: 1000 * 15
}),timeout: 1000 * 15,})
loadResource(id){
return axios.request({
method: 'GET',url: `/resource/${id}`
})
.catch((err) => {
process.logger.error('Error with request (...)')
})
.then((res) => {
handle(res)
})
}
for(let id of [1,2,3,4,(...)]){
setInterval(() => loadResource(id),5000)
}
handle(res){...}
我正在考虑的事情:
- 在提出新请求之前等待答复(并寻求最佳方法来做到这一点)
还有什么可以做的以最佳方式处理请求?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。