javascript - Difference between clients Date.now()
问题描述
I want to display the same timer values to all users. When server start timer, he send to clients countdown finish date.
clients.broadcast({ timerFinish: Date.now() + 5000 })
server generates finish time and give it to clients;
timeLeft = serverData.timerFinish - Date.now()
clients do calculation every second to get time until timer finish;
But clients got different Date.now()
value! Also server have difference.
How to realise this timer better?
解决方案
据推测,在这种情况下,服务器的时钟会赢得任何争议。
在这种情况下,将服务器的时间也发送给客户端:
const now = Date.now();
clients.broadcast({ now, timerFinish: now + 5000 });
然后客户端可以计算服务器时间和他们的时间之间的差异并使用该信息。
这不允许传输时间,但在大多数情况下,它会“足够好”。如果您需要考虑传输时间,您需要在客户端和服务器之间进行多次往返,以便它们确定网络时间的统计平均值(这对于任何单独的交换都可能不正确,因为这些事情会有所不同,但只有你可以做这么多)。
要真正准确地了解它,您可以研究网络时间协议 (NTP) 的工作原理并进行一点模拟。
推荐阅读
- ios - iOS dark light mode not updating UIViewController
- swift - 如何使在 TextField 中输入的文本不可删除?
- ssl - 如何通过在 Amazon Linux 2 上编辑 httpd.conf 将 ssl 证书安装到 Apache2
- regex - sed 用另一个文件的内容替换多行文件中的标记
- javascript - 如何在 nextjs 类组件中以编程方式路由到或导航到路由?
- python - Pandas 将一个组的值投射给组中的每个成员
- azure - Azure Blob 存储中是否有类似传输加速的功能?
- angular - 处理 AngularFireModule.initializeApp 中的错误
- google-sheets - Google 表格:如何计算累积的分层定价
- html - 如何确保内部 div 仅使用 CSS/HTML 不会超出其容器 div flexbox?