我想了解Firebase和侦听客户端在短时间内对实体进行大量更新并且客户端正在侦听该实体的“值”更改的情况下的行为。
假设我在firebase中有一个带有一些简单数据的实体。
{
"entity": 1
}
该“实体”的价值得到了很快的更新。像下面的代码那样写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的倾听客户端是否会收到包含0-999的所有1000个通知,或者Firebase是否有限制措施?
答案 0 :(得分:4)
首先,重要的是要注意Firebase实时数据库是状态同步服务,而不是发布/订阅服务。
如果您的位置正在快速更新,则该服务可确保最终状态在所有客户端中保持一致,但并非所有间歇性状态都将浮出水面。每次更新最多会触发一个事件,但服务器可以自由地进行压缩&#39;将相同位置连续更新为一个。
在进行更新的客户端上,我认为当前的行为是每个更改都传播一个本地事件,但我可能是错的,这是一个值得注意的例外。
为了实现每个中间状态的有保证的交付,可以将push
(Objective-C中的childByAutoId
)放到数据库位置的事件列表中,而不是简单地更新价值直接。查看有关保存数据列表的Firebase REST API docs