让我们说我有这些客户(c1,c2,c3,c4,c5,c6)。现在,c1向数据库ref写入哪个客户端监听。 让我们来说c2听众就是这样写的'触发并立即写入所有客户端也监听的ref(或删除该节点)。能保证写出c1'将被触发(或者在删除的情况下,它会触发它)c2'写入在所有客户?
答案 0 :(得分:2)
保证单个客户端的所有写入操作按顺序执行,并按该顺序广播到其他客户端。因此,如果客户端1执行两次写入(写入1和写入2),则在提交写入1之前,没有其他(订阅的)客户端将看到写入2的结果。
但无法保证客户端会看到所有更改。实际上,我们明确地不同步状态更改,我们同步最终状态。如果写1和写2修改相同的位置,则无法保证所有客户端都会写入1.例如:如果客户端暂时与网络断开连接,则可能只看到写入2的结果。
当写入相互抵消时,这可能特别棘手。假设您有一个当前为true
的布尔值。写1将其设置为false
,而写2将其设置回true
。如果客户端持续连接,很可能会看到完整的序列:true
- > false
- > true
。但是,如果客户端未连接,则可能会错过整个状态更改,并且只是始终查看true
。
我认为这可能会回答您的问题:您不能依赖客户端接收每个状态更改,因为Firebase不会同步状态更改。如果要同步状态更改,则应存储这些更改。因此,您将使用命令“set to false”存储推送ID,然后将“设置为true”并将其广播到客户端(或云功能)。
答案 1 :(得分:0)
无法保证订购。快速更改可能会以意外顺序触发函数调用。
https://firebase.google.com/docs/functions/firestore-events#limitations_and_guarantees