我正在使用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