Sockets 带Redux的Websocket、消息请求、消息响应是否始终按顺序接收?

Sockets 带Redux的Websocket、消息请求、消息响应是否始终按顺序接收?,sockets,asynchronous,websocket,socket.io,redux,Sockets,Asynchronous,Websocket,Socket.io,Redux,假设我编辑我的个人资料名称,顺序为“Alpha”、“Beta”、“Charlie” 那么响应消息是否总是有序的 是否不存在“Alpha”将是最后一条响应消息的情况,以便最终将我的配置文件名编辑为“Alpha” 重演) 例如,我在应用程序中使用Redux 在Redux应用程序中,我将使用(socket.send)三次发送EDIT_PROFILE_REQUEST操作,其有效负载依次为PROFILE name、“Alpha”、“Beta”、“Charlie” 然后,如果编辑过程已完成,则将发送编辑\配

假设我编辑我的个人资料名称,顺序为“Alpha”、“Beta”、“Charlie”

那么响应消息是否总是有序的

是否不存在“Alpha”将是最后一条响应消息的情况,以便最终将我的配置文件名编辑为“Alpha”

重演)

例如,我在应用程序中使用Redux

在Redux应用程序中,我将使用(socket.send)三次发送EDIT_PROFILE_REQUEST操作,其有效负载依次为PROFILE name、“Alpha”、“Beta”、“Charlie”

然后,如果编辑过程已完成,则将发送编辑\配置文件\成功操作

我想知道的是,编辑档案的成功也按“Alpha”、“Beta”、“Charlie”的顺序排列

我是否可以保证回复信息始终有序,以便我的个人资料名称将被编辑为“Charlie”?

是和否

TL;DR->您无法看到第三方套接字服务按该顺序发送您的消息。但是,在大多数情况下,您可以设计javascript应用程序,使其表现得像是一种保证

如果您使用的是
socket.send
,我将假定这是类似socket.io的第三方websocket服务。在这种情况下,您正在从js客户端(使用redux管理内部数据“状态”)与另一台计算机websocket服务器通信

websocket的行为在javascript客户端的边界之外。即使服务部门认为它会按顺序响应,但现实世界可以干预。。。在(A)、(B)和(C)请求之间可能会断电。然后A也被接受并响应,与(C)相同,但websocket服务器从未看到(B)

这是一个极端的,但说明性的例子

如果实施得当,Redux可以帮助推动一些保证或安全假设。它可以帮助确保js应用程序的“状态”或数据更改的顺序是同步的,也就是说,如果您只在javascript应用程序中执行(a)然后(b)然后(c),那么它们会按照该顺序及时发生

因此,关键在于管理这一边界。在用户决定单击按钮后,通过等待单击来管理用户单击js应用程序的边界。同样,您可以等待websocket确认它确实执行了(A)(B)或(C)


对于您的示例来说,一个简单但非常有用的模式是使用“接受最新请求”的方法,使您的js应用程序的行为看起来好像顺序得到了保证。如果您关闭socket.send(A),则等待响应。如果(B)是在套接字声明它已获得(A)之前发送的,那么您将丢弃(A)并发送(B),然后等待套接字是否回复(B)操作成功

谢谢,用“序列号”的概念来保证订单怎么样?再次感谢你!如果有这个问题的一些资源。请告诉我!还有其他解决方案吗?看起来很简单,这个问题是CS中最具挑战性和最有趣的问题之一。。。分布式计算。这段视频很好地解释了一些看似简单的“订单问题”是如何变得极其复杂并可以解决的。但实际上,在javascript客户机上使用redux,有很多更直接、更实用的“保证订单”方法。您是否有特定的问题、bug或用例?确保经过3次编辑后不会返回“Alpha”的实用方法是不要触发“EDIT_SUCCESS”样式的操作,该操作会将JS应用程序上的名称更改为“Alpha”,除非这是最后发送的“EDIT_请求”。也就是说,如果您在Alpha之后发送了Beta的编辑请求,并且从websocket获得了成功的Beta更改,那么您将停止等待Alpha成功并忽略它。