ホームページ  >  記事  >  ウェブフロントエンド  >  nodejs httpリクエストのタイムアウト

nodejs httpリクエストのタイムアウト

王林
王林オリジナル
2023-05-16 21:21:061984ブラウズ

Node.js は、サーバー側で効率的な Web アプリケーションを構築できるオープン ソースの 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();

上の例では、timeout という名前のプロパティをオプション オブジェクトに追加しました。これは、リクエストのタイムアウトを 5 秒に設定するために使用されます。リクエストがタイムアウトになると、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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。