Firebase 时间戳同步
Firebase Timestamp Syncing
在我的回合制在线游戏中,我有一个游戏内计时器,它会从 24 小时滴答到 0,当任何玩家输掉时它达到 0。
轮到玩家时,他们会向数据库写入如下内容:
action: "not important"
timeStamp: 1670000000
我想要的是两个玩家中的任何一个都能够随时进入正在进行的游戏,读取“timeStamp”并相应地设置时钟,显示自上次操作以来还剩下多少时间。
写入数据库时,我使用 ServerValue.TIMESTAMP (Android)。我知道使用此处描述的 ServerTimeOffset 来估计服务器时间的能力;
https://firebase.google.com/docs/database/android/offline-capabilities#server-timestamps
但是我感觉测试的时候并不总是准确的,所以我想探索一下是否有其他方法可以做到这一点。我真正想要的是在读取节点时获取实际的服务器时间戳:
timeLeft = actionTimeStamp - currentServerTime + 24h
这可以一次完成吗?我正在使用 RTDB,但如果可能的话,我愿意迁移到 Firestore。
如果不将服务器时间戳写入数据库,就无法获取服务器时间戳,但是您当然可以让每个客户端都写入它,然后立即读回。
也就是说,使用写入的初始开始时间和 serverTimeOffset
值应该没有太大区别。
有关工作示例,请查看
在我的回合制在线游戏中,我有一个游戏内计时器,它会从 24 小时滴答到 0,当任何玩家输掉时它达到 0。 轮到玩家时,他们会向数据库写入如下内容:
action: "not important"
timeStamp: 1670000000
我想要的是两个玩家中的任何一个都能够随时进入正在进行的游戏,读取“timeStamp”并相应地设置时钟,显示自上次操作以来还剩下多少时间。
写入数据库时,我使用 ServerValue.TIMESTAMP (Android)。我知道使用此处描述的 ServerTimeOffset 来估计服务器时间的能力;
https://firebase.google.com/docs/database/android/offline-capabilities#server-timestamps
但是我感觉测试的时候并不总是准确的,所以我想探索一下是否有其他方法可以做到这一点。我真正想要的是在读取节点时获取实际的服务器时间戳:
timeLeft = actionTimeStamp - currentServerTime + 24h
这可以一次完成吗?我正在使用 RTDB,但如果可能的话,我愿意迁移到 Firestore。
如果不将服务器时间戳写入数据库,就无法获取服务器时间戳,但是您当然可以让每个客户端都写入它,然后立即读回。
也就是说,使用写入的初始开始时间和 serverTimeOffset
值应该没有太大区别。
有关工作示例,请查看