Firebase realtimeDB serverTimestamp 以毫秒精度同步客户端

问题描述 投票:0回答:1

我正在尝试使用 Firebase 实时数据库同步多个客户端以同时触发时间敏感事件。

一个客户端将 serverTimestamp 设置到文档中,所有其他客户端都使用它来根据此“服务器”时间戳计算何时触发事件。

问题:serverTimestamp在每个客户端读取时都不一样,相差几百毫秒。这对于在同一台机器上运行的 2 个浏览器来说是正确的 - 所以它不是 UTC 时间差异。

我的第一个猜测是 Firebase 正在添加延迟偏移(延迟),但是当我在每个客户端上打印 .info/serverTimeOffset 时,它相对非常小,并且始终应为正值。

现在,使用发送方客户端的 UTC 时间比使用此 serverTimestamp 更准确。

所以我的问题是,为什么在每个客户端上读取时 serverTimestamp 是不同的数字。

javascript firebase-realtime-database
1个回答
0
投票

我的第一个猜测是 Firebase 正在添加延迟偏移(延迟),但是当我在每个客户端上打印 .info/serverTimeOffset 时,它相对非常小,并且始终应为正值。

这是正确的。由于客户端和服务器之间的网络延迟,客户端无法与后端 100% 完美同步。每个客户端的延迟时间都会有所不同,具体取决于网络条件,甚至这些条件也会随着时间而变化。

此外,您不能假设任何客户端的内部时钟将与 Firebase 相同。客户端的操作系统可能有自己的同步方法(使用其他一些源)来进行类似的估计,但它永远不会 100% 准确。

也许有一天,我们的设备中都会配备原子钟,以尽量减少时间差异,但在此之前,我们必须允许系统猜测延迟。

© www.soinside.com 2019 - 2024. All rights reserved.