4

来自 Firebase 的常见问题解答:

如果我失去网络连接,我的应用会怎样?

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

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

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

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

4

1 回答 1

6

当您的客户端在离线一段时间后重新上线并写入数据时,这些更改的行为将取决于您用于写入它们的方法:

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

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

一般来说,Firebase 已构建为自动处理离线和在线,因此您不必编写应用程序代码来检测和处理这种情况。

于 2013-11-14T18:30:31.277 回答