>웹 프론트엔드 >프런트엔드 Q&A >nodejs http 요청 시간 초과

nodejs http 요청 시간 초과

王林
王林원래의
2023-05-16 21:21:062060검색

Node.js는 서버 측에서 효율적인 웹 애플리케이션을 구축할 수 있는 오픈 소스 JavaScript 런타임입니다. HTTP 요청 및 응답을 처리하는 가볍고 효율적인 방법을 제공합니다. 그러나 때때로 HTTP 요청을 할 때 "요청 시간 초과" 오류 메시지가 나타나는 경우가 있습니다. 이는 네트워크 연결이 충분히 안정적이지 않거나 서버 응답이 너무 느린 환경에서 발생할 수 있습니다. 이 기사에서는 Node.js의 HTTP 요청 시간 초과 문제를 해결하는 방법에 대해 설명합니다.

1. Node.js의 HTTP 요청
Node.js에서 HTTP 요청을 하려면 내장된 HTTP 모듈을 사용해야 합니다. HTTP 모듈은 HTTP 요청 및 응답을 처리하는 데 사용할 수 있는 다양한 메서드와 속성을 제공합니다. 다음은 간단한 HTTP GET 요청의 예입니다.

const http = require('http');

const options = {
  host: 'www.example.com',
  path: '/resource',
  port: 80,
  method: 'GET'
};

const req = http.request(options, (res) => {
  console.log(`statusCode: ${res.statusCode}`);
    
  res.on('data', (d) => {
    process.stdout.write(d);
  });
});

req.on('error', (error) => {
  console.error(error);
});

req.end();

위의 예에서는 http.request() 메서드를 사용하여 HTTP 요청을 생성했습니다. 이 메소드는 호스트 이름, 포트, 경로 및 요청 메소드와 같은 정보를 포함하는 옵션 객체를 매개변수로 받아들입니다. 옵션 객체는 요청에 대한 최대 시간 초과(밀리초)를 지정하는 데 사용되는 시간 초과 속성을 설정할 수도 있습니다.

2. HTTP 요청 시간 초과 처리
Node.js를 사용하여 HTTP 요청을 할 때 흔히 발생하는 문제는 요청 시간 초과입니다. 네트워크 연결이 불안정하거나 서버 응답이 느려서 지정된 시간이 지난 후에도 요청이 완료되지 않았습니다. 요청 시간 초과가 처리되지 않으면 애플리케이션이 중단되어 사용자 경험이 저하될 수 있습니다.

요청 시간 초과 문제를 해결하기 위해 Node.js는 요청 시간 초과에 대한 시간 제한을 설정하는 데 사용할 수 있는 시간 초과 이벤트를 제공합니다. 요청 시간이 초과되었는지 감지하기 위해 시간 초과 이벤트 핸들러를 추가할 수 있습니다. 시간이 초과되면 요청을 종료하고 적절한 작업을 수행할 수 있습니다. 다음은 HTTP 요청 시간 초과 처리의 예입니다.

const http = require('http');

const options = {
  host: 'www.example.com',
  path: '/resource',
  port: 80,
  method: 'GET',
  timeout: 5000 // 设置超时时间为5秒钟
};

const req = http.request(options, (res) => {
  console.log(`statusCode: ${res.statusCode}`);

  res.on('data', (d) => {
    process.stdout.write(d);
  });
});

req.on('timeout', () => {
  req.abort();
});

req.on('error', (error) => {
  console.error(error);
});

req.end();

위의 예에서는 요청 시간 초과를 5초로 설정하는 데 사용되는 옵션 개체에 timeout이라는 속성을 추가했습니다. 요청 시간이 초과되면 req의 시간 초과 이벤트가 트리거되고 abort() 메서드가 호출되어 요청을 종료합니다. 여기서는 요청 시간 초과에 대한 오류 메시지를 간단히 인쇄하고 필요에 따라 오류 메시지를 처리할 수 있습니다.

3. 타임아웃 작동 원리
위 예시의 코드를 통해 타임아웃 이벤트를 설정한 것을 볼 수 있지만, 요청이 완료된 후 5초 후에 타임아웃 이벤트가 발생하므로 반드시 5초 후에 발생하지는 않습니다. . HTTP 요청 시간 초과는 TCP 연결 시간 초과와 읽기 시간 초과의 합으로 결정됩니다.

TCP 연결 시간 초과는 서버가 요청을 수락하고 응답을 보내는 데 걸리는 시간을 나타냅니다. 필요한 경우 옵션 개체의 소켓 속성에서 시간 초과 길이를 설정할 수 있습니다. 예를 들어 3000으로 설정합니다.

const options = {
  host: 'www.example.com',
  path: '/resource',
  port: 80,
  method: 'GET',
  timeout: 5000,
  socket: {
    connectTimeout: 3000
  }
};

읽기 시간 초과는 응답 데이터가 전송되는 데 걸리는 시간을 나타냅니다. 필요한 경우 읽기 시간 초과 길이를 옵션 개체에서 설정할 수도 있습니다. 예를 들어 2000으로 설정할 수 있습니다.

const options = {
  host: 'www.example.com',
  path: '/resource',
  port: 80,
  method: 'GET',
  timeout: 5000,
  timeout: 5000,
  socket: {
    connectTimeout: 3000
  },
  headers: {
    'Keep-Alive': true,
    'Connection': 'keep-alive'
  },
  agent: new http.Agent({ keepAlive: true })
};

실제 응용 프로그램에서는 TCP 연결 시간 초과 및 시간 초과가 응답 시간에 따라 설정되어야 합니다. 요청 시간 초과로 인한 오류를 방지하려면 서버 및 네트워크 연결의 안정성을 확인하세요.

4. 결론
Node.js에서 HTTP 요청을 수행하면 요청 시간 초과 문제가 발생할 수 있습니다. 이러한 문제를 해결하기 위해 Node.js에 내장된 HTTP 모듈을 사용하여 요청에 대한 시간 초과 이벤트를 설정하고 요청을 종료하며 오류 메시지를 처리할 수 있습니다. TCP 연결 시간 초과 및 읽기 시간 초과의 길이는 서버 응답 시간과 네트워크 연결의 안정성에 따라 달라집니다. 따라서 서버 응답 시간과 네트워크 연결 안정성을 위해 합리적인 타임아웃을 설정해야 합니다.

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

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