インターネットの発展、技術の進歩、インターネット アプリケーションの継続的な出現により、人々のネットワーク通信に対する需要はますます高まっています。これらのネットワーク通信の中で、http プロトコルが最も一般的な方式です。 nodejs では、http リクエストを簡単に送信してネットワーク通信を実現できます。この記事では、nodejsを使って複数のhttpリクエストを送信する方法を紹介します。
nodejs では、http モジュールは http プロトコルを処理するために使用されるモジュールであり、HTTP サーバーとクライアントを作成するための実用的な API を提供します。 HTTP リクエスト、および HTTP リクエストの送信。
http モジュールを使用して http リクエストを送信するには、2 つのメソッドを使用できます。
非同期プログラミングは、nodejs の非常に一般的なプログラミング方法であることがわかっているため、Promise を使用して複数の http リクエストを非同期プログラミングすることができます。
Promise は将来の結果を表すオブジェクトであり、Promise 自体は関数パラメーターを受け取るコンストラクターです。関数には、成功と失敗のコールバック関数をそれぞれ表す、resolve と拒否という 2 つのパラメーターがあります。
Promise を使用する利点は、コールバック地獄の問題を解決し、コードをより読みやすく、保守しやすくできることです。
ES6 で導入された async/await 構文シュガーにより、Promise を使用せずに非同期プログラミングを実装できるようになり、コードがより簡潔で明確になります。
async/await は実際に Promise を単純化してカプセル化します。async キーワードを使用して非同期関数を宣言し、await キーワードを使用して非同期操作の結果を待機します。これにより、プログラムの実行が可能になります。コールバック地獄の問題を避けるため。
以下では、Promise と async/await を使用して複数の http リクエストを送信します。
複数の Web サイトに対して http リクエストを開始し、これらの Web サイトから返された結果をマージしたいと想定します。
まず、以下に示すように、ターゲット URL とこれらのリクエストのリクエスト メソッド (ここでは GET メソッドを使用します) を格納する配列を作成します。
const targets = [ {url: 'https://www.baidu.com', method: 'GET'}, {url: 'https://www.google.com', method: 'GET'}, {url: 'https://www.bing.com', method: 'GET'}, ];
次に、受信する関数を定義します。ターゲット URL とリクエスト メソッド。http リクエストの送信とレスポンスの処理のための Promise オブジェクトを返します。この関数の実装は次のとおりです。
const http = require('http'); function sendRequest(target) { return new Promise((resolve, reject) => { const req = http.request(target, res => { let result = ''; res.setEncoding('utf8'); res.on('data', chunk => { result += chunk; }); res.on('end', () => { resolve(result); }); }); req.on('error', err => { reject(err); }); req.end(); }); }
上記の関数では、http.request メソッドを使用して http リクエストを送信し、res.on('data', .. .) イベント処理関数 、res.on('end', ...) イベント処理関数を使用してレスポンス終了後のロジックを処理し、最終的に受信したレスポンス データを Promise の結果として返します。
次のコードを使用して、この関数が適切に動作しているかどうかをテストできます。
sendRequest({url: 'https://www.baidu.com', method: 'GET'}) .then(result => { console.log(result); }) .catch(err => { console.error('An error occurred:', err); });
これで、複数のターゲット URL とリクエスト メソッドを受け取り、複数の http リクエストを送信してその結果をマージするための Promise オブジェクトを返す関数を定義できるようになりました。関数の実装は次のとおりです:
function sendMultiRequests(targets) { return Promise.all(targets.map(target => { return sendRequest(target); })); }
上記の関数では、Promise.all メソッドを使用して、複数の Promise オブジェクトを新しい Promise オブジェクトにカプセル化します。現在のすべての Promise が成功すると、返される Promise は次のようになります。いずれかの Promise が失敗すると、返された Promise も失敗します。
この関数を使用して、複数の http リクエストを送信し、その結果をマージできるようになりました。
sendMultiRequests(targets) .then(results => { console.log('All requests completed.'); console.log('Results:'); console.log(results); }) .catch(err => { console.error('An error occurred:', err); });
すべての http リクエストが完了すると、結果が結合されて出力されます。
ES6 では、async/await 構文を使用して非同期プログラミングを実装できます。上記のコードは、async/await を使用して実装できます。この実装の核心は、Promise を非同期関数としてカプセル化し、await キーワードを使用して非同期操作の完了を待つことです。
以下は、async/await を使用して複数の http リクエストを送信する例です。
async function sendRequests(targets) { const results = await Promise.all(targets.map(async target => { const result = await sendRequest(target); return result; })); return results; }
上記のコードでは、複数の http リクエストを送信し、その結果を待つ非同期関数 sendRequests を定義します。 Promise.all メソッドは Promise オブジェクトを返します。すべての Promise が成功すると、返された Promise も成功します。いずれかの Promise が失敗した場合、返された Promise も失敗します。 await キーワードを使用して Promise オブジェクトの完了を待ち、結果を results 配列に直接割り当てます。
次のコードを使用して、この非同期関数が適切に動作しているかどうかをテストできます。
sendRequests(targets) .then(results => { console.log('All requests completed.'); console.log('Results:'); console.log(results); }) .catch(err => { console.error('An error occurred:', err); });
すべての http リクエストが完了すると、結果が結合されて出力されます。
この記事では、nodejs を使用して複数の http リクエストを送信する 2 つの方法を紹介します。 1 つ目の方法は、Promise を使用して複数の http リクエストを送信し、その結果をマージすることです。 2 番目の方法は、async/await 構文シュガーを使用して複数の http リクエストを送信し、その結果を待つことです。 Promise を使用するか、async/await を使用するかに関係なく、複数の http リクエストの非同期プログラミングを簡単に実装でき、コードがより読みやすく、保守しやすくなります。
以上がnodejs は複数の http リクエストを送信しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。