nodejsの非同期ネットワークリクエスト

王林
リリース: 2023-05-18 09:59:07
オリジナル
790 人が閲覧しました

Node.js は、Chrome V8 エンジン上に構築された JavaScript ランタイム環境です。JavaScript を使用してサーバー側でプログラムを作成でき、非同期 I/O 操作をサポートし、同時実行性が高く、遅延が少ないネットワークの構築に適しています。アプリケーション。 Node.js を使用してネットワーク アプリケーションを開発する場合、非同期ネットワーク リクエストの使用は非常に重要な技術点です。

この記事では、Node.js における非同期ネットワーク リクエストの関連知識と実装方法を紹介します。

1. 非同期ネットワーク リクエストとは

非同期ネットワーク リクエストを紹介する前に、まず同期と非同期の概念を理解しましょう。

同期操作とは、操作を実行するときに、前の操作が完了するまで待ってから次の操作に進む必要があることを意味します。次のコードに示すように:

var fs = require('fs');
var data = fs.readFileSync('file.txt');
console.log(data);
ログイン後にコピー

上記のコードはファイルを同期的に読み取る方法であり、プログラムはファイルの読み取り後にデータを出力します。

非同期操作とは、操作を実行するときに、前の操作が完了するのを待たずに次の操作に進むことができることを意味します。次のコードに示すように:

var fs = require('fs');
fs.readFile('file.txt', function(err, data) {
    console.log(data);
});
ログイン後にコピー

上記のコードはファイルを非同期で読み取る方法であり、プログラムはファイルの読み取りを開始すると、ファイルの読み取りが完了するのを待たずにすぐに次のステートメントを実行します。読み込み完了後、コールバック関数が実行され、読み込んだデータがパラメータとしてコールバック関数に渡され、データが出力されます。

ネットワーク リクエストにはネットワーク遅延や帯域幅制限などの要因が関係し、リクエストごとに応答時間が異なるため、ネットワーク リクエストを処理する場合、非同期操作は非常に重要です。非同期操作を使用すると、CPU リソースを最大限に活用し、プログラムの同時処理能力を向上させることができます。

2. Node.js での非同期ネットワーク リクエスト

Node.js では、非同期ネットワーク リクエストを実装する方法がたくさんあります。一般的な 2 つの方法を以下に紹介します。

  1. http モジュールは非同期ネットワーク リクエストを実装します

http モジュールは、HTTP リクエストを処理するために特別に使用される Node.js のモジュールです。 http モジュールは、HTTP リクエストを送信する request() メソッドと、サーバー応答データを処理するコールバック関数を提供します。

以下は、GET リクエストを送信するための http モジュールのサンプル コードです:

var http = require('http');

var options = {
    host: 'www.baidu.com',
    port: 80,
    path: '/'
};

http.request(options, function(response) {
    var str = '';
    response.on('data', function(chunk) {
        str += chunk;
    });
    response.on('end', function() {
        console.log(str);
    });
}).end();
ログイン後にコピー

上記のコードでは、オプションは、ターゲット ホストなど、GET リクエストを送信するための関連パラメータを定義します。リクエストのポートとパス。 request() メソッドは、HTTP リクエストの送信に使用できる書き込み可能なストリーム オブジェクトを返します。応答データが到着すると、応答オブジェクトはデータ イベントをトリガーします。on() メソッドを通じてデータ イベントのコールバック関数を登録し、各データ ブロックをバッファに読み取ることができます。データ転送の終了時に、応答オブジェクトは終了イベントをトリガーします。on() メソッドを通じて終了イベントのコールバック関数を登録できます。読み取られたバッファ データはコールバック関数で処理できます。

  1. リクエスト モジュールは非同期ネットワーク リクエストを実装します

リクエスト モジュールは、HTTP リクエストの送信に使用される Node.js のサードパーティ モジュールです。 http モジュールよりもシンプルで使いやすく、拡張性が高く、Cookie、リダイレクト、HTTP プロキシなどの高度な機能をサポートしています。

リクエスト モジュールを使用するには、まずリクエスト モジュールをインストールする必要があります:

npm install request --save
ログイン後にコピー

インストールが完了すると、Node.js でリクエスト モジュールを使用できるようになります。以下は、リクエスト モジュールを使用して GET リクエストを送信するサンプル コードです。

var request = require('request');

request('http://www.baidu.com', function(error, response, body) {
    if (!error && response.statusCode == 200) {
        console.log(body);
    }
});
ログイン後にコピー

上記のコードでは、request() メソッドが HTTP リクエストを送信し、コールバック関数でサーバーから返されたデータを処理します。 。 request() メソッドは 2 つのパラメーターを受け入れます。最初のパラメーターは要求された URL、2 番目のパラメーターはコールバック関数です。コールバック関数のパラメータは、エラー、応答、応答本文です。リクエストにエラーがなく、戻りステータス コードが 200 の場合、レスポンス本文がコンソールに表示されます。

3. 非同期ネットワーク リクエストの利点

非同期ネットワーク リクエストを使用すると、次の利点があります:

  1. プログラムの同時処理能力の向上

非同期ネットワーク要求は、CPU リソースを最大限に活用し、プログラムの同時処理能力を向上させることができます。

  1. リクエストの待機時間の短縮

非同期ネットワーク リクエストを使用すると、リクエストが他のリクエストの応答を待つことを回避できるため、待ち時間が短縮されます。

  1. 帯域幅リソースの合理的な利用

非同期ネットワーク リクエストを使用すると、リクエストに対する応答を待機している間に他のリクエストを開始できるため、帯域幅リソースを合理的に利用できます。

4. 非同期ネットワークリクエストの注意事項

非同期ネットワークリクエストを使用する場合は、次の点に注意してください:

  1. エラーの処理

ネットワークリクエストには、ネットワーク切断、サーバー応答タイムアウトなどのエラーが発生する可能性があります。したがって、リクエストで発生する可能性のあるエラーは必ずコールバック関数で処理してください。

  1. コールバック関数の実行順序

非同期ネットワーク リクエストは非ブロッキングでイベント駆動型であるため、コールバック関数の実行順序は不確実です。複数の非同期ネットワーク要求が同時に発行された場合、応答の順序は保証されません。

  1. 同時リクエストの数を制御する

同時リクエストが多すぎると、CPU リソースが過剰に占有され、サーバーの応答が遅くなったり、エラーが発生したりすることがあります。したがって、大量の非同期ネットワーク リクエストを送信する場合は、サーバーの通常の動作に影響を与えないように同時リクエストの数を制御する必要があります。

5.概要

非同期ネットワーク リクエストは、Node.js の非常に重要な技術点です。この記事では、Node.js における非同期ネットワーク リクエストの関連知識と実装方法を紹介します。非同期ネットワーク要求を使用すると、プログラムの同時処理能力が向上し、要求の待ち時間が短縮され、帯域幅リソースを合理的に利用できます。非同期ネットワーク リクエストを使用する場合は、エラーの処理、同時リクエストの数の制御、コールバック関数の実行順序などの問題に注意してください。

以上がnodejsの非同期ネットワークリクエストの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!