我怎样才能通过websockets同步两个javascript定时器

我有一个网站与一个JS视觉节拍器(如指挥),可以通过websocket在多台机器上触发。 我怎样才能使节拍器的开始尽可能地同步?

谢谢。

我会做的是测量延迟,并作出相应的补偿。

对于到服务器的每个连接,服务器都应定期发送ping消息(不是真正的ICMP ping消息),只是通过已build立的websocket通道发送一些消息,并测量从客户端获得响应所需的时间。 将这个等待时间除以2,对于消息从服务器到客户端所花费的时间,你有一个不错的猜测。

一旦你知道这一点,你可以估计两个客户之间的时间差,并相应地进行调整。

请注意,这是不完美的任何手段。 我会保持你的节拍器时钟完全客户端,只使用与服务器通信进行调整。 这将为用户带来更平滑的性能。

这是一个时钟恢复问题。

你将要面对的问题是每个系统上的时间可能会不一样,而且在更长的时间内会趋于分散。 除此之外,audio文字时钟也不是从上下class时间开始驱动的,而且会有自己的偏离。 这意味着你没有机会获得样品或相位的准确性。 IEEE1394audiostream和MPEG传输stream层都通过向数据stream中发送embedded了比特精度的时间戳来解决这个问题。 您显然不会因为以太网,networking堆栈, Nagelalgorithm和webSockets中的任何传输队列的组合而获得这种奢侈。

10到100毫秒可能更现实。

你可能想看看networking时间协议用来解决实质上类似的问题的技术。

从所有客户端获取时间(UTC)。 find客户的抵消。 根据每个客户端偏移安排一个开始时间。