Php ajax请求是否保证按顺序命中服务器?

Php ajax请求是否保证按顺序命中服务器?,php,jquery,ajax,nginx,Php,Jquery,Ajax,Nginx,发件人: Ajax中的第一个字母代表“异步”,意思是操作并行进行,并且不能保证完成的顺序 我的解释是,您的then/done/always/fail回调不能保证按请求发出的顺序发出。如果您正在调用不同的API端点,并且某些端点比其他端点需要更长的时间,那么这是有意义的 我想知道的是,如果您向同一个API端点发出ajax请求,它们是否保证按顺序到达服务器 我已经编写了一些代码,可以在您键入时自动保存草稿,我想知道是否保证始终保存草稿的最新副本,或者是否有可能在新的ajax请求之后出现旧的ajax请

发件人:

Ajax中的第一个字母代表“异步”,意思是操作并行进行,并且不能保证完成的顺序

我的解释是,您的then/done/always/fail回调不能保证按请求发出的顺序发出。如果您正在调用不同的API端点,并且某些端点比其他端点需要更长的时间,那么这是有意义的

我想知道的是,如果您向同一个API端点发出ajax请求,它们是否保证按顺序到达服务器

我已经编写了一些代码,可以在您键入时自动保存草稿,我想知道是否保证始终保存草稿的最新副本,或者是否有可能在新的ajax请求之后出现旧的ajax请求,然后我的PHP代码会导致新的草稿被旧的草稿覆盖。请求返回的顺序并不重要;只是他们收到的订单很重要


我可以想出一种方法来解决这个问题,我只想知道这是否必要。

与任何异步方法一样,答案是自信的“可能!”

仅仅因为您的JavaScript引擎以特定的顺序触发了一系列回调,并不意味着服务器将以相同的顺序接收它们,尤其不意味着它们将以相同的顺序结束

如果其中一个请求由于数据包丢失而暂停,或者被负载平衡器阻塞,或者由于无数原因中的任何一个而延迟,那么它将失去顺序。由于这些事件并不罕见,最安全的赌注是它们将以随机顺序发行并以随机顺序完成


如果需要按顺序执行,则必须等待一个操作完成,然后再触发下一个操作。

与任何异步操作一样,答案是自信的“可能!”

仅仅因为您的JavaScript引擎以特定的顺序触发了一系列回调,并不意味着服务器将以相同的顺序接收它们,尤其不意味着它们将以相同的顺序结束

如果其中一个请求由于数据包丢失而暂停,或者被负载平衡器阻塞,或者由于无数原因中的任何一个而延迟,那么它将失去顺序。由于这些事件并不罕见,最安全的赌注是它们将以随机顺序发行并以随机顺序完成


如果需要按顺序执行,则必须等待其中一个完成,然后再触发下一个。

请求可以按照所涉及的网络决定的任何顺序到达

e、 g

请求#1在时间点0.000采用路线A
请求#2在时间点0.123采用路线B

但突然,反铲切断了光缆处理路径a,导致网络通过使用载波的路径C重新路由,导致到达延迟12小时。因此,在服务器上,您最终得到

请求#2到达时间点0.173,走了一条很好的“慢”50ms路线

请求#1到达时间点12:00:00:0.50,经过更长的路由。

请求可以以相关网络决定的任何顺序到达

e、 g

请求#1在时间点0.000采用路线A
请求#2在时间点0.123采用路线B

但突然,反铲切断了光缆处理路径a,导致网络通过使用载波的路径C重新路由,导致到达延迟12小时。因此,在服务器上,您最终得到

请求#2到达时间点0.173,走了一条很好的“慢”50ms路线

请求#1到达时间点12:00:00:0.50,已经走了更长的路线。

我一直和你在一起,直到最后。我想我不必等到一个完成后再触发下一个。我只需要在ajax请求上附加一个顺序计数器,然后在服务器上删除任何低于迄今为止收到的最大数量的请求。可能正在监视整数溢出。但是,如果我每500毫秒只发射一个,那我就可以在32位有符号整数上使用34年。@mark-Oh,如果你能改变API,使其具有序列标识符,那绝对是。我刚才说的是一般理论上的排序,使用的是一个你无法控制的通用API。如果您能够忽略顺序错误的请求,
new Date().getTime()
如果您发送调用相当频繁但不太积极,或者在其他情况下发送随机31位整数和客户端会话标识符,则值将起作用。我一直支持您,直到结束。我想我不必等到一个完成后再触发下一个。我只需要在ajax请求上附加一个顺序计数器,然后在服务器上删除任何低于迄今为止收到的最大数量的请求。可能正在监视整数溢出。但是,如果我每500毫秒只发射一个,那我就可以在32位有符号整数上使用34年。@mark-Oh,如果你能改变API,使其具有序列标识符,那绝对是。我刚才说的是一般理论上的排序,使用的是一个你无法控制的通用API。如果您能够忽略顺序错误的请求,
new Date().getTime()
如果您发送调用相当频繁但不太积极,或者在其他情况下发送随机的31位整数和客户端会话标识符,则值将起作用。如果请求是在单独的TCP连接上发出的,则不能保证它们的顺序;但是,如果它们是通过相同的连接发送的(HTTP 2.0可以实现),那么它们的顺序将由底层TCP流保证。和往常一样,浏览器是否支持HTTP2.0,以及它如何处理AJAX请求都是一个难题;但服务器也必须支持HTTP 2.0。如果请求是在单独的TCP连接上发出的,则不能保证它们的顺序;但是,如果它们是通过相同的连接发送的(HTTP 2.0可以实现),那么它们的顺序将由底层TCP流保证。一如既往,浏览器是否支持HTTP