如何通过WebSocket同步两个javascript计时器

如何通过WebSocket同步两个javascript计时器,javascript,node.js,audio,websocket,Javascript,Node.js,Audio,Websocket,我有一个带有js可视节拍器(像指挥家一样)的网站,可以通过多台机器上的websocket触发。 如何使节拍器的开始尽可能同步 谢谢。我要做的是测量延迟,并进行相应的补偿 对于与服务器的每个连接,服务器应定期发送ping消息(不是真正的ICMP ping…只是通过已建立的websocket通道发送的一些消息),并测量从客户端获得响应所需的时间。将这个延迟除以2,您可以很好地猜测消息从服务器传输到客户端所需的时间 一旦知道了这一点,就可以估计两个客户机之间的时间差,并进行相应的调整 请注意,这无论如

我有一个带有js可视节拍器(像指挥家一样)的网站,可以通过多台机器上的websocket触发。 如何使节拍器的开始尽可能同步


谢谢。

我要做的是测量延迟,并进行相应的补偿

对于与服务器的每个连接,服务器应定期发送ping消息(不是真正的ICMP ping…只是通过已建立的websocket通道发送的一些消息),并测量从客户端获得响应所需的时间。将这个延迟除以2,您可以很好地猜测消息从服务器传输到客户端所需的时间

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

请注意,这无论如何都不是完美的。我将完全在客户端维护您的节拍器时钟,并且只使用与服务器的通信进行调整。这将为用户提供更流畅的性能。

这是一个问题

您将面临的问题是,每个系统上的墙时间可能不同,而且,从长期来看,墙时间可能会漂移。除此之外,音频字时钟也不是由墙上的时间驱动的,它会有自己的漂移。这意味着您没有机会获得采样或相位精度。IEEE1394音频流和MPEG传输流层都通过向数据流发送位精度嵌入的时间戳来实现这一点。很明显,如果将以太网、网络堆栈、算法和WebSocket中的任何传输队列结合在一起,您就不会得到这种奢侈

10到100毫秒可能更现实


您可能想看看用于解决本质上类似问题的技术

从所有客户端获取时间(UTC)。查找客户端的偏移量。根据每个客户端偏移量安排开始时间。

您具体想同步什么?你需要多精确?你用音频标记了这个。。。取决于你想做什么,你将无法让这些远程足够近。我会尽可能的紧。这是木西人的节拍器。所以大约100毫秒是完美的。作为一个音乐家,我建议任何超过10毫秒或20毫秒的抖动都是非常明显的。这将很难在网络上实现。你能再详细一点吗?你只需要确保两边的节奏相同,起点相似(~100ms?),是的,节拍器必须是音乐同步的。玩家从电脑上获得分数,只需要一个同步工作的时间指示。记忆越同步越好。我不从浏览器上运行音频。谷歌有一些方法可以做到这一点。控制台中设置并记录了延迟。