Android:使用 Firebase 实时数据库跨多个客户端同步 CountDownTimer
Android: Sync CountDownTimer across multiple clients using Firebase Realtime Database
我正在使用 Android 和 Firebase 实时数据库开发一个应用程序,用户可以在其中加入一个房间,然后当主持人按下开始游戏时,所有客户端都会开始主游戏 Activity(通过 ValueEventListener房间中的 "Started" 个子节点)。主游戏有一个 60 秒的倒计时,用户说一句话,然后在 60 秒结束时收集并显示所有句子。
由于 60 秒计时器在不同的客户端上关闭,我很难在最后收集到所有句子。我需要一种方法来确保所有游戏同时结束,以便收集过程顺利,不会遗漏任何内容。
我知道 Firebase 有:/.info/serverTimeOffset
和 ServerValue.TIMESTAMP
但我正在努力研究如何使用它们来同步计时器。
我尝试使用 System.currentTimeMillis() + serverTimeOffset
来估计服务器时间并让所有客户端倒计时到 endTime - (System.currenTimeMillis() + serverTimeOffset)
其中 endTime
是主机写入数据库的时间所有客户端都已阅读,但计时器仍未完成。
处理这种情况的最佳方法是什么?
我建议:
代替 运行 服务器上每秒更新一次的计时器,只需存储事件的 start/stop 时间并允许客户端管理自己的计时器。
不是每秒-1(因为setInterval和其他客户端工具不是很精确)而是通过将当前时间戳与末尾进行比较,并确定差异。
我正在使用 Android 和 Firebase 实时数据库开发一个应用程序,用户可以在其中加入一个房间,然后当主持人按下开始游戏时,所有客户端都会开始主游戏 Activity(通过 ValueEventListener房间中的 "Started" 个子节点)。主游戏有一个 60 秒的倒计时,用户说一句话,然后在 60 秒结束时收集并显示所有句子。
由于 60 秒计时器在不同的客户端上关闭,我很难在最后收集到所有句子。我需要一种方法来确保所有游戏同时结束,以便收集过程顺利,不会遗漏任何内容。
我知道 Firebase 有:/.info/serverTimeOffset
和 ServerValue.TIMESTAMP
但我正在努力研究如何使用它们来同步计时器。
我尝试使用 System.currentTimeMillis() + serverTimeOffset
来估计服务器时间并让所有客户端倒计时到 endTime - (System.currenTimeMillis() + serverTimeOffset)
其中 endTime
是主机写入数据库的时间所有客户端都已阅读,但计时器仍未完成。
处理这种情况的最佳方法是什么?
我建议:
代替 运行 服务器上每秒更新一次的计时器,只需存储事件的 start/stop 时间并允许客户端管理自己的计时器。
不是每秒-1(因为setInterval和其他客户端工具不是很精确)而是通过将当前时间戳与末尾进行比较,并确定差异。