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

我相信你在这里混淆了两个上下文,如果你在“同一”时间触发两个请求,那么在 ajax 中,一个不能保证在另一个之前返回。这与 TCP 无关,它位于 OSI 模型的不同层。TCP 数据包构成流量,并且“重新排序和重新排列”对 http 协议(ajax 是其中的一部分)完全不可见。

于 2012-06-15T19:26:04.063 回答
0

术语“异步”回答了您自己的问题。但是,在某些情况下,异步请求可能会有效地变为同步。有关更多信息,请参阅他的答案

当您发送请求时,服务器将开始处理该请求。如果接下来有另一个请求,服务器将开始处理它(如果可以的话),依此类推。随着每个请求完成(有或没有输出),您的回调将被触发(如果存在)。

于 2012-06-15T19:27:33.377 回答
0

与单个 TCP 请求有关的所有数据包都保证按顺序接收。这种排序虽然只适用于单个请求。可以将多个请求发送到不同的主机,并且通常无法保证您从与之交互的主机接收响应的顺序。因此,在发送异步请求时,您实际上是在并行发送多个请求,并且无法保证响应请求的顺序,因为每个请求都独立于所有其他请求。

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

You are right... but taking it out of context. AJAX requests are over HTTP, which is in turn over TCP.

Each AJAX request is a different HTTP request, which is in turn over a different TCP connection, therefore they are not rearranged and ordered in the way you think they are.

Since each AJAX HTTP request may take a variable amount of time to be handled, and they are being handled concurrently, there is no guarantee about the order in which they finish.

于 2012-06-15T19:30:40.100 回答