首页 > 解决方案 > 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?

标签: javascripttimertimestamp

解决方案


据推测,在这种情况下,服务器的时钟会赢得任何争议。

在这种情况下,将服务器的时间也发送给客户端:

const now = Date.now();
clients.broadcast({ now, timerFinish: now + 5000 });

然后客户端可以计算服务器时间和他们的时间之间的差异并使用该信息。

这不允许传输时间,但在大多数情况下,它会“足够好”。如果您需要考虑传输时间,您需要在客户端和服务器之间进行多次往返,以便它们确定网络时间的统计平均值(这对于任何单独的交换都可能不正确,因为这些事情会有所不同,但只有你可以做这么多)。

真正准确地了解它,您可以研究网络时间协议 (NTP) 的工作原理并进行一点模拟。


推荐阅读