gpt4 book ai didi

java - Firebase 时钟偏差的迹象

转载 作者:行者123 更新时间:2023-12-01 14:12:27 25 4
gpt4 key购买 nike

Firebase 的 docs about presence假设“客户端的时钟偏差”是“Firebase 将添加到本地报告时间(以毫秒为单位的纪元时间)来估计服务器时间”的值。

然后,在示例中,它举例说明:

 @Override
public void onDataChange(DataSnapshot snapshot) {
double offset = snapshot.getValue(Double.class);
double estimatedServerTimeMs = System.currentTimeMillis() + offset;
}

在我用于测试的一台 Android 设备上,我更改了时钟,使其快了 4 分钟(大约)。现在,当我通过 Java SDK 获取时钟偏差时,我得到的值如下:

232599.0

由于该值以毫秒为单位,因此对应于 3.87665 分钟。

但要估计服务器时间,我必须将其添加到本地时间戳 (System.currentTimeMillis())。是这样吗?

如果客户的时钟已经快了 4 分钟,并且我添加这 3.9 分钟,难道我不会得到快了大约 8 分钟的估计吗?

顺便说一句,如果我可以在 setPriority() 中使用服务器时间戳,那就完美了。目前,ServerValue.Timestamp 仅可用于 setValue(),因为它不是原始值。由于我想使用 setPriority() 中的时间,因此必须使用 System.currentTimeMillis() 和时钟偏差来计算服务器的时间。

最佳答案

您添加偏移量以确定相对于服务器的本地时间。

因此,如果您获得的服务器时间为 08:05,则您的客户端快了 10 分钟,则客户端计算机上的时钟在客户端上读数为 08:15(08:05 + 00:10 分钟)。

如果您想在不使用 ServerValue.Timestamp 的情况下恢复时间,那么您需要进行减去,这将需要客户端时间并使其与服务器匹配(例如 08:15 - 00:10 = 08:05)。

这就是我在引入 ServerValue.Timestamp 之前在项目中所做的,并且效果很好。

关于java - Firebase 时钟偏差的迹象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18392716/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com