Angular 2 - 所有用户都使用相同的计时器

时间:2017-01-13 08:56:00

标签: javascript angular rxjs

我创建了一个计时器,它必须同时对所有用户完全相同

我在数据库中保存了start_time(计时器启动时的时间戳) 并编写以下表达式来计算剩余时间:

this.timeCheckSub = Observable.interval(1000)
.subscribe(() => {
  this.timer = this.TURN_TIME - (Math.floor(Date.now() / 1000) - this.room.start_time);
});

this.TURN_TIME - 以秒为单位的数字(设置为15)

this.timer显示15 .. 14..13 ..并且在某些设备中:17..16..14 ..等等

问题是每个设备根据计算机时钟显示Math.floor(Date.now() / 1000不同的时间。

我如何解决这个问题,以便在所有设备上显示相同的计时器?

我知道我可以计算使用observable的剩余秒数,但是当用户刷新页面或用户有一些延迟加载时,它将无法正常工作。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我知道你可以解决Date.now()的唯一方法就是从服务器发送时间戳。但这当然不会完全准确,因为到达客户需要时间。我不认为通过在您无法控制环境的客户端上进行计算来确保同时保证同一时间。

计时器应该如何准确满足您的需求?也许还有其他一些方法可以解决它?例如。在服务器上运行计时器并立即检查客户端或使用服务器推送更新。