从Firebase的常见问题解答中:
如果我失去网络连接,我的应用程序会怎样?
重新获得连接后,Firebase就会透明地重新连接到Firebase服务器。同时,您的应用在本地完成的所有Firebase操作都会立即触发事件(...)。重新建立连接后,您将收到适当的事件集,以便您的客户端“追上”当前服务器的状态
然后,如果我离线并继续修改我的本地数据,然后又重新联机并且其他客户端执行了不同的更改,会发生什么情况?最终哪一个会被保存?
如果服务器上的数据被覆盖,是否意味着较旧的数据可以替代较新的数据?
如果保留了在线添加的较新数据,我是否知道离线时提交的数据已被丢弃?
当您的客户端重新联机后,在脱机一段时间并写入数据之后,这些更改的行为将由您用来编写这些更改的方法决定:
set()
,setWithPriority()
,remove()
,和push()
方法是最后写的胜利。这意味着,如果脱机客户端A在t = 0处进行更改,而在线客户端B在t = 10处进行更改,则在重新连接时,脱机客户端A的更改将覆盖客户端B的更改。请注意,这特别适用于所做的更改(即设置/a/b/c
为1
),而不是整个Firebase。transaction()
但是,该方法是专门为处理冲突而构建的。脱机客户端A重新连接后,您的交易更新功能将重新运行,并将新更改应用于Firebase数据。在大多数应用程序中,用户将数据追加到列表中或修改单个用户状态,但不修改同一数据。如果有多个用户正在修改同一条数据,则transaction()
无论离线与否,都需要使用。
一般来说,Firebase可以自动处理脱机和联机状态,因此您不必编写应用程序代码来检测和处理这种情况。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句