Firebase避免由多个客户端(web)覆盖/更新同一节点



我正在使用firebase来创建结账系统,在该系统中,同一商店的多个用户可以同时覆盖/更新一个节点。

场景/步骤:

用户1:在系统中输入项目代码(他可以输入多个)

用户2:在系统中输入项目代码(//)

用户3:从系统中释放该项目代码

用户4。。。等等

代码:

"-KhBgsi8HwT5BloV0Srt" : {
"lastUpdated" : 1504285854767,
"methodName" : "ITEM_ENTERED",
"payLoad": "{'Id':1, 'ItemName': 'Apples'}"   
}

在上面的代码中,每当任何用户输入时,我都会用item的methodName和payLoad覆盖上面的节点。每当用户从系统中释放项目时,我都会像这样重写:,再次更新同一节点

"-KhBgsi8HwT5BloV0Srt" : {
"lastUpdated" : 1504285854767,
"methodName" : "ITEM_RELEASED",
"payLoad": "{'Id':1, 'ItemName': 'Apples'}"   
}

所有用户都连接到同一个firebase节点,该节点可以同时被上述用户覆盖。因此,如果所有用户都在同一时间进行操作,则节点将获得保存在节点中的最后一个操作。我如何才能避免这种情况,并确保所有用户都获得相同的数据,而不是节点上发生的最后一次数据。

在某个时刻,当用户快速处理所有事情时,上面的节点就会与ITEM_ENTERED/ITEM_RELEASED方法混淆,客户端就会失去同步。

我希望我把我的观点说清楚了。我只需要一个正确的方向来修复对同一节点的并发写入。

感谢您的帮助。感谢

评论越来越长,但这似乎是解决问题的有效方法只需推送另一个节点,并使您的侦听器返回最后推送的节点

与其使用child_changed,不如使用child_added

最新更新