Firebase 中快速更新实体的消息保证

Message guarantees on rapidly updated entities in Firebase

我想了解 Firebase 和侦听客户端在短时间内对实体进行大量更新并且客户端正在侦听 'value' 更改的情况下的行为在那个实体上。

假设我在 firebase 中有一个包含一些简单数据的实体。

{
  "entity": 1
}

而且 "entity" 的值更新得非常快。类似于下面的代码,写入 1000 个整数。

//pseudo-code for making 1000 writes as quickly as possible
for(var i = 0; i < 1000; i++) {
   ref.child('entity').set(i)
}

忽略暂时性问题,使用 'on' API in a browser 的监听​​客户端是否会收到所有 1000 个包含 0-999 的通知,或者 Firebase 是否有适当的限制?

首先,重要的是要注意 Firebase 实时数据库是状态同步服务,而不是 pub/sub 服务。

如果您有一个快速更新的位置,该服务保证最终状态在所有客户端上都是一致的,但不是所有间歇性状态都会浮出水面。每次更新最多会触发一个事件,但服务器可以自由 'squash' 将对同一位置的连续更新合并为一个。

在进行更新的客户端上,我认为当前的行为是每个更改都会传播一个本地事件,但我可能是错的,这是一个值得注意的例外。

为了保证每个中间状态的传递,可以将 push(Objective-C 中的 childByAutoId)添加到数据库位置的事件列表中,而不是简单地更新直接的价值。查看 Firebase REST API docs 保存数据列表