同时在多个连接的设备上开始倒计时 - Firebase Android

Start a countdown on several connected devices at the same time - Firebase Android

我正在创建一个 Android 应用程序,其中玩家连接到 Firebase 实时数据库(每个房间 2 到 4 个玩家)。如果我总结一下我的代码应该做什么:玩家可以依次点击一个按钮。当玩家点击并轮到他时,应用程序将在服务器上写入(使用 runTransaction)一个 int 类型(例如“clicked:2”表示玩家 2 刚刚点击)。当“点击”键在服务器上可见时(addValueEventListener),连接到该房间的所有玩家执行(同时执行在客户端完成)3 秒 CountDownTimer .在此倒计时期间,所有玩家(无一例外)都可以点击他们的按钮,如果是这种情况,只会考虑第一个点击的玩家(因为 runTransaction)并将其写入服务器。所以每个人都会在他的设备上看到一个玩家在倒计时期间点击了他的按钮,然后我们重新开始(即由下一个玩家开始倒计时等)。 从理论上讲,这很好,但在测试后出现了问题(使用旧的和新的 - 因此更快的 - 智能手机):

有些设备比其他设备更快,而且在大多数情况下,不同玩家的倒计时不会同时开始。所以我在想,例如(但其他人是可能的,不要犹豫,这样说!),在玩家点击的时间(以毫秒为单位)写入服务器,并把这个时间+ 500 毫秒(或其他)开始倒计时。但是为此你需要有 Firebase 时间(我认为 TimeStamp)而且我不知道如何......(最好只有 in Java,我不喜欢触摸json太多)

影响客户端倒计时的因素之一是每个客户端和服务器之间的延迟。具有更快连接的客户端将更快地获得更新值,因此更快地启动倒计时器。

Firebase 在客户端首次连接时估计此延迟,并使其在客户端的 .info/serverTimeOffset 节点中可用。您可以使用此值来(部分)纠正延迟。有关这方面的更多信息和示例代码,请参阅 clock skew.

上的文档