>웹 프론트엔드 >프런트엔드 Q&A >nodejs 동시 다중 요청 502

nodejs 동시 다중 요청 502

WBOY
WBOY원래의
2023-05-25 10:23:36979검색

최근 nodejs를 사용할 때 문제가 발생했습니다. 여러 동시 요청을 보낼 때 502 오류가 반환되었습니다. 나는 이 문제를 조사하는 데 시간을 보냈고 마침내 해결책을 찾았습니다. 이 기사에서는 같은 문제를 겪고 있는 다른 사람들을 돕기 위해 내 경험을 공유하겠습니다.

우선 502 오류가 무엇인지 이해해야 합니다. 502 오류는 일반적으로 요청 중에 오류나 시간 초과가 발생했기 때문에 서버가 클라이언트의 요청을 올바르게 처리할 수 없음을 의미합니다. nodejs에서 이 오류는 일반적으로 요청이 차단되거나 요청 시간 초과가 잘못 설정되어 발생합니다.

다음으로 nodejs에서 여러 개의 동시 요청을 보내는 방법을 살펴보겠습니다. nodejs에서는 async.parallel을 사용하여 여러 동시 요청을 보낼 수 있습니다. 샘플 코드는 다음과 같습니다.

const async = require('async');
const request = require('request');

const urls = [
  'https://www.example.com/page1',
  'https://www.example.com/page2',
  'https://www.example.com/page3',
  // Add more URLs here.
];

async.parallel(
  urls.map(url => callback => request(url, (err, res, body) => callback(err, body))),
  (err, results) => {
    if (err) {
      console.error(err);
      return;
    }

    console.log(results);
  },
);

위 코드에서는 async.parallel을 사용하여 여러 요청을 병렬로 보냅니다. 요청하려는 URL을 배열에 넣은 다음 지도 기능을 사용하여 이를 요청 집합으로 변환합니다. 그런 다음 async.parallel을 사용하여 이러한 요청을 병렬로 보내고 요청이 완료되면 결과를 수집합니다.

이제 502 오류를 해결하는 방법을 살펴보겠습니다. 제가 조사한 바에 따르면 502 오류는 일반적으로 요청이 차단되거나 요청 시간 제한이 잘못 설정되어 발생하는 것으로 나타났습니다. 요청이 차단되는 경우 요청을 올바르게 처리하는 콜백 함수가 없거나 요청 중에 리소스를 해제하지 않기 때문일 수 있습니다.

한 가지 방법은 요청 라이브러리에서 제공하는 연결 유지 옵션을 사용하는 것입니다. 연결 유지 옵션을 사용하면 요청을 연결 풀에 보관하고 기존 TCP 연결을 재사용할 수 있으므로 서버의 로드가 줄어들고 성능이 향상됩니다. 요청 옵션에 다음을 추가할 수 있습니다.

const request = require('request').defaults({ forever: true });

또 다른 방법은 요청에 시간 초과 옵션을 추가하여 요청이 차단되는 것을 방지하는 것입니다. 요청 옵션에 시간 초과 옵션을 추가할 수 있습니다.

const request = require('request').defaults({ timeout: 5000 });

위 코드는 시간 초과를 5000밀리초로 설정합니다. 즉, 요청이 5초를 초과하면 시간 초과 오류가 발생합니다.

마지막으로 502 오류가 발생하는 경우 요청을 한꺼번에 보내는 대신 일괄적으로 보낼 수 있습니다. 이렇게 하면 서버의 부하가 줄어들고 502 오류가 발생할 가능성이 줄어듭니다. 샘플 코드는 다음과 같습니다.

const async = require('async');
const request = require('request').defaults({ timeout: 5000 });

const urls = [
  'https://www.example.com/page1',
  'https://www.example.com/page2',
  'https://www.example.com/page3',
  // Add more URLs here.
];

const chunkSize = 2; // Set the maximum number of requests to send at once.

async.eachLimit(
  urls,
  chunkSize,
  (url, callback) => request(url, (err, res, body) => callback(err, body)),
  (err) => {
    if (err) {
      console.error(err);
      return;
    }

    console.log('All requests completed successfully.');
  },
);

위 코드에서는 요청을 두 그룹으로 나누고 async.eachLimit을 사용하여 한 번에 전송되는 최대 요청 수를 제한했습니다. 이렇게 하면 서버의 부하가 줄어들고 502 오류가 발생할 가능성이 줄어듭니다.

간단히 말하면 nodejs 동시 요청 502 오류 문제가 발생하면 위의 방법을 사용하여 해결해 볼 수 있습니다. 요청 콜백 기능과 타임아웃 설정에 주의를 기울이면 요청 차단 가능성을 줄일 수 있습니다. 또한 일괄 요청을 보내면 과부하 상황을 방지하고 502 오류 가능성을 줄일 수 있습니다.

위 내용은 nodejs 동시 다중 요청 502의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.