1

この質問は、Ajaxリクエストが送信された順序で返されることが保証されていないことを示唆しているようです。ただし、AjaxはTCPプロトコルを使用します。これにより、パケットが送信された順序で返されることが保証されているようです。

順序付けられたデータ転送—宛先ホストはシーケンス番号に従って再配置されます

非同期Ajaxリクエストは、送信された順序で返されることが保証されていますか?

4

6 に答える 6

3

いいえ。

これはTCPとは何の関係もありません。これは、リクエストをHTTPサーバーで処理する必要があるためであり、並列リクエストが完了するまでに同じ時間がかかるという保証はありません。

于 2012-06-15T19:24:18.997 に答える
1

非同期Ajaxリクエストは、送信された順序で返されることが保証されていますか?

いいえ。サーバーが最初の要求に応答するのに、たとえば3倍の時間がかかる場合はどうなりますか?例:

  • 時間0:リクエストAが送信されました
  • 時間1:リクエストBが送信されました
  • 時間2:サーバー処理要求AおよびB
  • 時間3:サーバーは要求Aを処理し、応答Bをクライアントに送信します
  • 時間4:サーバー処理要求A
  • 時間5:サーバーが応答Aをクライアントに送信する
于 2012-06-15T19:24:32.493 に答える
1

ここで2つのコンテキストを混同していると思います。ajaxで2つのリクエストを「同時に」開始すると、一方が他方より先に返されることが保証されません。これは、OSI モデルの別のレイヤーにある TCP とは関係ありません。TCP パケットはトラフィックを構成し、「並べ替えと再配置」は http プロトコル (ajax はその一部) にはまったく見えません。

于 2012-06-15T19:26:04.063 に答える
0

「非同期」という用語は、あなた自身の質問に答えます。ただし、非同期リクエストが実質的に同期になる場合があります。詳細については、彼の回答を参照してください。

リクエストを送信すると、サーバーはそのリクエストの処理を開始します。別の要求が続く場合、サーバーは (可能であれば) その処理を開始します。各リクエストが終了すると (出力の有無にかかわらず)、コールバックが発生します (存在する場合)。

于 2012-06-15T19:27:33.377 に答える
0

1 つの TCP 要求に関連するすべてのパケットは、順番に受信されることが保証されます。ただし、この順序は単一のリクエストにのみ適用されます。複数の要求がさまざまなホストに送信される可能性があり、通常、対話しているホストから応答を受信する順序について保証はありません。したがって、非同期リクエストを送信する場合、基本的に複数のリクエストを並行して送信することになり、各リクエストは他のすべてのリクエストから独立しているため、リクエストが応答される順序を保証することはできません。

于 2012-06-15T19:28:56.823 に答える
0
Ordered data transfer — the destination host rearranges according to sequence number

あなたは正しい...しかし、それを文脈から外してください。AJAX 要求は HTTP を介して行われ、HTTP は TCP を介して行われます。

各 AJAX リクエストは異なる HTTP リクエストであり、異なる TCP 接続を介して行われるため、思い通りに並べ替えられたり順序付けられたりすることはありません。

各 AJAX HTTP 要求の処理にかかる時間はさまざまであり、それらは同時に処理されるため、処理が完了する順序について保証はありません。

于 2012-06-15T19:30:40.100 に答える