微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在NodeJS中优化HTTP轮询?

如何解决如何在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 举报,一经查实,本站将立刻删除。