顺序写入用例中的 .on 事件触发顺序

拉沃卡德

假设我有这些客户(c1、c2、c3、c4、c5、c6)。现在,c1 向数据库 ref 写入哪些客户端正在侦听。假设 c2 侦听器在此“写入”触发器上触发并立即写入所有客户端也侦听的某个引用(或删除该节点)。是否保证“写入 c1”将在所有客户端中的“写入 c2”之前触发(或在删除的情况下,它会触发)?

弗兰克·范·普费伦

来自单个客户端的所有写操作都保证按顺序执行,并按该顺序向其他客户端广播。因此,如果客户端 1 执行两次写入(写入 1 和写入 2),那么在写入 1 提交之前,其他(订阅的)客户端将永远不会看到写入 2 的结果。

但不能保证客户端会看到所有更改。实际上,我们明确地不同步状态更改,而是同步最终状态。如果write 1和write 2修改同一个位置,不保证所有client都会得到write 1。 例如:如果一个client暂时断网,可能只能看到write 2的结果。

当写入相互抵消时,这可能特别棘手。假设您有一个当前为true. 写入 1 将其设置为false,而写入 2 将其设置回true如果客户端持续连接,它很可能会看到完整的序列:true-> false-> true但是如果一个客户端没有连接,它可能会错过整个状态变化,只是一直看到true

我认为这可能会回答您的问题:您不能依赖客户端接收每个状态更改,因为 Firebase 不会同步状态更改。如果要同步状态更改,则应存储这些更改。因此,您将使用命令“设置为假”然后“设置为真”存储推送 ID,并将其广播给客户端(或云函数)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章