1

ページをリロードせずに Ajax を使用して一部の値を更新する Web ページを作成しました。XMLHttpRequest オブジェクトを使用して POST 要求を送信しています。応答が到着したときに呼び出されるコールバック関数を割り当てていますが、問題なく動作します。

しかし...ブラウザは、特定の ip:port からのデータをこの特定のコールバック関数に送信する必要があることをどのように認識しているのでしょうか? つまり、最悪のシナリオでは、Firefox と IE が同じサーバーからほぼ同時にいくつかの POST リクエストを作成し、さらに前の POST リクエストへの応答が到着する前に後続の POST リクエストを作成した場合、データはどのように受信されるのでしょうか。正しいコールバック関数にルーティングされます ??

4

3 に答える 3

0

各リクエストには独自の接続があります。もちろん、単一の接続がある場合は単一の応答があり、この応答はコールバックに含まれることを意味します。

于 2009-06-24T10:39:56.297 に答える
0

一般的な考え方は、ブラウザが新しい接続を完全に開き、サーバーに要求を行い、応答を待つというものです。これはすべて1つの接続であり、JavaScriptAPIを介してブラウザによって管理されます。接続は切断されず、ブラウザが何かを押し下げたときに再び取得されるため、リクエストを発信したブラウザは、リクエストが終了したときに何をすべきかを認識しています。

本当に非同期であるのは、これらの接続がバックグラウンドで別々に発生する可能性があることです。これにより、応答を待っている間に複数の要求が出たり戻ったりすることができます。これにより、サーバーが後で何かを返すように見える、優れたAJAX効果が得られます。

于 2009-06-24T10:43:08.427 に答える
0

作成された各 HTTP 要求は、個別の TCP 接続上にあります。ブラウザは、データがその接続に戻ってくるのを待つだけで、コールバック関数を呼び出します。

下位レベルでは、OS の TCP 実装は、ソケットごとに異なる「ソース ポート」を使用して、各ソケット (つまり、接続) に属するパケットを追跡します。ソースポートをオープンソケットにマッピングするルックアップテーブルがいくつかあります。

ブラウザが任意の 1 つのサーバーに対して行う同時接続の数が制限されていることに注意してください (通常は 2 つまで)。これは、データを送受信するためにページがリロードされていた昔は賢明なことでしたが、AJAX の啓蒙されたこの時代では、これは本当に面倒なことです。この問題に関する興味深い議論については、ページを参照してください。

于 2009-06-24T10:45:56.363 に答える