Firebase如何处理离线时执行的事件?

时间:2013-11-14 11:00:34

标签: firebase consistency

从Firebase的常见问题解答:

  

如果丢失网络连接,我的应用会发生什么情况?

     

Firebase会立即透明地重新连接到Firebase服务器   你恢复连接。与此同时,所有Firebase操作都已完成   您的应用在本地将立即触发事件(...)。一旦   重新建立连接,您将收到相应的一组   事件,以便您的客户端“赶上”当前的服务器状态

如果我离线并继续修改我的本地数据,然后重新上线并且其他客户端执行了不同的更改,会发生什么?哪一个最终会被保存?

如果服务器上的数据被覆盖,是否意味着旧数据可以替换较新的数据?

如果保留在线添加的新数据,我是否知道离线时提交的数据已被丢弃?

1 个答案:

答案 0 :(得分:6)

当您的客户重新上线,在离线期间和写入数据后,这些更改的行为将取决于您用来编写它们的方法:

  • set()setWithPriority()remove()push()方法是最后写入获胜。这意味着如果离线客户端A在t = 0进行更改,并且在线客户端B在t = 10时进行更改,则脱机客户端A的更改将在重新连接时覆盖客户端B的更改。请注意,这特别适用于所做的更改(即设置/a/b/c1),而不是整个Firebase。
  • 但是,transaction()方法专门用于处理冲突。当离线客户端A重新连接时,您的交易更新功能将重新运行并将新更改应用于您的Firebase数据。

在大多数应用程序中,用户将数据附加到列表或修改单个用户状态,但不修改同一条数据。如果多个用户正在修改同一条数据,则无论您是否处于离线状态,都需要transaction()使用。

一般来说,Firebase的构建是为了自动处理脱机和联机,因此您不必编写应用程序代码来检测和处理该情况。