【问题标题】:How Can I Speed Up Multiple Requests In node.js?如何加快 node.js 中的多个请求?
【发布时间】:2021-03-05 17:52:55
【问题描述】:

我有一个代码,它基本上是检查一堆网站是否正常运行。

const request = require('request');
const urls = [];

var start = Date.now();
var count = 1;
var countUrls = urls.length;

var up= 0
var down = 0;

function callback(start) {
    console.log((Date.now() - start) + 'ms execution.');
    console.log('\n Up: ' + up + ' Down: ' + down);
    process.exit()
}

urls.forEach( function(url) {
    var options = {
    url: url,
    timeout: 10000
    };

    request(options, function (error, response, body) {
        if(error) {
            console.error(count + ': ' + url + ' is down: ' + error);
            count++;
            down++;
        } else {
            console.log(count + ': ' + url + ' is up: ');
            count++;
            up++;
        }

        if((count - 1) == countUrls) {
            callback(start);
        }
    });
});

它工作得很好。在我的 urls 数组中,我有 120 个 URL。当我运行此代码时,它会在 20-30 秒内自行执行。但是如果我将 o URL 的数量增加到 720,则执行时间会增加到 1 分 30 秒。

我想了解两件事;

1- 超时设置为 10 秒。即使有 120 个 URL,它怎么能超出这个范围?

2- 此代码不需要好的硬件,它只是连接到网站。我能做些什么来加快速度?我想在 1 分钟内检查大量的 URL(可能是 100k),因为我的代码每分钟都会运行一次。

仅供参考,此代码在我的本地计算机上运行,​​并且我有 24 MBPS 的互联网连接。这可能是问题所在,但大多数服务器都有 1 GBPS 的互联网连接,当我比较 24 - 1 和 120 - 100k 时,我觉得这还不够。

【问题讨论】:

  • 你应该使用 Promises 试试这个,这样你可以让它更好地工作

标签: node.js request monitoring ping monitor


【解决方案1】:

您可以尝试使用 Promise.all(),它将并行启动所有请求(而不是您当前正在执行的顺序)。

Promise.all([promise1, promise2, promise3]).then((values) => {
  console.log(values);
});

数组中的每个元素都对应于您网站的 URL(或至少是请求)。

您可能在并行启动 100,000 个请求时遇到问题 - 但只需围绕它编写代码即可。

如果其中一个失败,您自然需要考虑错误处理,但简而言之,这是您需要关注的。

【讨论】:

    猜你喜欢
    • 2016-04-02
    • 2012-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-19
    • 2013-08-29
    • 2016-03-29
    • 1970-01-01
    相关资源
    最近更新 更多