0

私は Web プログラミングに比較的慣れていないので、これは明らかな人もいるかもしれませんが、私にはわかりません。非同期リクエストの場合、リクエスト/レスポンスのペアはどのように一致しますか? 極端な例として、node.js を使用し、非同期でもあるサーバーを呼び出す非同期 jQuery リクエストがあるかもしれません。これらのタイプの呼び出しを多数行うと、要求/応答が混同されるように見えます。混同しないようにするための設備は?

4

1 に答える 1

0

通常、サーバーへのリクエストを開始する関数にコールバック関数を提供するため、リクエストとその応答が混同されることはありません。ノードは 2 つを一緒に保ちます。

例えば:

http.get("http://www.google.com/index.html", function(res) {
  console.log("Got response: " + res.statusCode);
}).on('error', function(e) {
  console.log("Got error: " + e.message);
});

http.get 関数は Google へのリクエストを開始し、ノードはコールバック関数 (function(res){...}) への参照を保存します。

ノードは、実行するコードがなくなるまで、現在の関数 (http.get の後に続くすべてのコード) を実行し続けます。

Google が応答の送信を開始し、ノードが他に何もしていないとすぐに、ノードは関数を見つけ、対応する応答オブジェクトがそれに渡され、使用できるようになります。

ノードはシングル スレッドです。つまり、一度に複数の処理を行うことはできません。そのため、現在の関数の実行が終了し、 Google が応答するまで、コールバック関数が呼び出されません。

詳細については、こちらをご覧ください: http://nodejs.org/api/http.html#http_class_http_clientrequest

PS: コールバック関数を提供する必要はありません。ただし、そうしないと、リクエストが成功したかどうかわかりません。そのため、常に 1 つを提供することをお勧めします。少なくとも、エラーをログに記録する必要があります。

于 2012-12-14T23:06:30.520 に答える