📜  如何使用 Node.js 运行多个并行 HTTP 请求?(1)

📅  最后修改于: 2023-12-03 15:38:05.254000             🧑  作者: Mango

如何使用 Node.js 运行多个并行 HTTP 请求?

在 Node.js 中,使用 http 模块可以轻松地发起一个 HTTP 请求。但是,当我们需要同时发起多个 HTTP 请求时,可能需要考虑并行请求的性能问题。本文将介绍如何在 Node.js 中运行多个并行的 HTTP 请求。

方案一:使用 async/awaitPromise.all
const https = require('https');

const urls = [
  'https://jsonplaceholder.typicode.com/posts/1',
  'https://jsonplaceholder.typicode.com/posts/2',
  'https://jsonplaceholder.typicode.com/posts/3',
];

async function fetch(urls) {
  const result = await Promise.all(
    urls.map(async (url) => {
      const response = await new Promise((resolve) => {
        https.get(url, (res) => resolve(res));
      });

      return new Promise((resolve) => {
        let data = '';
        response.on('data', (chunk) => {
          data += chunk;
        });

        response.on('end', () => {
          resolve(data);
        });
      });
    })
  );

  return result;
}

fetch(urls).then((result) => console.log(result));

这段代码使用了 async/awaitPromise.all 来处理多个并行请求。其中,Promise.all 接受一个数组,里面包含了多个返回 Promise 的 fetch 函数。通过使用 await 关键字,可以让每个请求等待返回结果。当所有请求都完成时,Promise.all 才会返回一个结果数组。

方案二:使用 http.request
const http = require('http');

const urls = [
  'http://jsonplaceholder.typicode.com/posts/1',
  'http://jsonplaceholder.typicode.com/posts/2',
  'http://jsonplaceholder.typicode.com/posts/3',
];

function fetchData(url) {
  return new Promise((resolve, reject) => {
    http
      .request(url, (response) => {
        let data = '';

        response.on('data', (chunk) => {
          data += chunk;
        });

        response.on('end', () => {
          resolve(data);
        });
      })
      .on('error', (error) => {
        reject(error);
      })
      .end();
  });
}

async function fetch(urls) {
  const result = await Promise.all(urls.map(fetchData));
  return result;
}

fetch(urls).then((result) => console.log(result));

这段代码使用了 http.request 来进行多个并行请求。对于每个请求,我们都创建一个 Promise。在 fetch 函数中,我们通过 Promise.all 来等待所有请求完成,并返回一个结果数组。

总结

在 Node.js 中运行多个并行的 HTTP 请求,有多种实现方式。本文分别介绍了使用 async/awaitPromise.all,以及使用 http.request 的方式。这些方式都可以提高请求的性能和效率,选择何种方式取决于具体的使用场景。