firebase客户端如何知道要同步的数据?

时间:2017-12-20 22:26:22

标签: firebase firebase-realtime-database

如果网络连接丢失并重新建立,有人可以分享一些关于firebase移动客户端如何知道从服务器下载哪些数据的知识吗?

让我们说:

  • 数据库中有一个对象,其中包含键key1和key3。
  • 移动客户端下载并离线。
  • 与此同时,添加了key2和key4
  • 客户端恢复连接并以某种方式接收key2和key4。

它究竟知道改变了什么?

  • 是否会再次下载整个系列?
  • 以某种方式交换所有对象的键来比较它丢失的内容吗?
  • 服务器是否记住哪些客户有什么?
  • 还有别的吗?

1 个答案:

答案 0 :(得分:1)

服务器会跟踪每个客户端的活动侦听器,但不会跟踪每个客户端知道的内容。

当您将侦听器附加到本地缓存中的位置时,客户端会计算缓存数据的所有分支的复合哈希键。它将这些哈希值发送到服务器,服务器对实际数据执行相同的散列。如果任何哈希值不同,则数据被修改,因此它从服务器发送回客户端。

请注意,此哈希/交换仅适用于已缓存并附加侦听器的数据。您没有收听的任何缓存数据都没有得到这种处理。由于您通常会在应用的生命周期内将侦听器添加到数据的不同部分,因此散列和同步的这一成本会在应用的生命周期内展开。在我看到一个不那么仁慈的行为的唯一时间是开发人员在他们的数据库的根目录上调用keepSynced(true),这实质上强制了一个"巨型同步"当你的应用程序启动时在这种情况下,本地缓存的散列及其同步可能需要非常重要的时间,内存和带宽。