Ajax请求是否保证按发送顺序返回?

时间:2012-06-15 19:22:55

标签: javascript ajax asynchronous tcp protocols

This question似乎暗示Ajax请求无法保证以发送的顺序返回。但是,Ajax使用TCP protocol,这似乎可以保证数据包将以发送的顺序返回:

  

有序数据传输 - 目标主机根据序列号重新排列

异步Ajax请求是否保证按发送顺序返回?

6 个答案:

答案 0 :(得分:3)

没有

这与TCP无关。这是因为请求必须由HTTP服务器处理,并且无法保证并行请求将花费相同的时间来完成。

答案 1 :(得分:1)

  

异步Ajax请求是否保证按发送顺序返回?

不。如果服务器响应第一个请求需要3倍的话,该怎么办?例如:

  • 时间0:请求A已发送
  • 时间1:请求B已发送
  • 时间2:服务器处理请求A和B
  • 时间3:服务器处理请求A,将响应B发送给客户端
  • 时间4:服务器处理请求A
  • 时间5:服务器向客户端发送响应A

答案 2 :(得分:1)

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

答案 3 :(得分:0)

术语“异步”回答了您自己的问题。但是,在某些情况下,异步请求可以有效地变为同步。有关详情,请参阅t his answer

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

答案 4 :(得分:0)

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

答案 5 :(得分:0)

Ordered data transfer — the destination host rearranges according to sequence number

你是对的......但是要脱离背景。 AJAX请求是通过HTTP进行的,而HTTP则依赖于TCP。

每个AJAX请求都是一个不同的HTTP请求,而这个请求依次是不同的TCP连接,因此它们不会按照您认为的方式重新排列和排序。

由于每个AJAX HTTP请求可能需要花费不同的时间来处理,并且它们正在同时处理,因此无法保证它们完成的顺序。