来自Firebase的常见问题解答:
如果我失去了网络连接,我的应用程序会怎么样? 一旦恢复连接,Firebase就会透明地重新连接到Firebase服务器。同时,由应用程序在本地完成的所有Firebase操作都会立即触发事件(.)。一旦连接重新建立,您将收到适当的事件集,以便您的客户端“赶上”当前服务器状态
那么,如果我离线并继续修改本地数据,然后恢复联机,其他客户端执行了不同的更改,会发生什么情况呢?哪一个最终会得救?
如果服务器上的数据被覆盖,是否意味着旧数据可以替换较新的数据?
如果联机添加的较新数据保持不变,是否知道脱机时提交的数据已被丢弃?
发布于 2013-11-14 18:30:31
当您的客户端重新联机时,在脱机期间并写入数据之后,这些更改的行为将取决于您用来编写这些更改的方法:
set()、setWithPriority()、remove()和push()方法是最后写的赢家.这意味着,如果脱机客户端A在t=0进行更改,而联机客户端B在t=10上进行更改,则脱机客户端A的更改将在重新连接时覆盖客户端B的更改。请注意,这特别适用于所做的更改(即将/a/b/c设置为1),而不是整个Firebase。transaction()方法是专门为处理冲突而构建的。当脱机客户端A重新连接时,您的事务更新功能将重新运行,并将新的更改应用于您的Firebase数据。在大多数应用程序中,用户将数据附加到列表或修改单个用户状态,而不是修改相同的数据。如果多个用户正在修改相同的数据,无论离线与否,您都希望使用transaction()。
一般来说,Firebase是用来自动处理离线和联机的,所以您不需要编写应用程序代码来检测和处理这种情况。
https://stackoverflow.com/questions/19975921
复制相似问题