2

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

谢谢。

4

3 回答 3

4

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

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

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

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

于 2012-12-23T01:47:07.967 回答
2

这是一个时钟恢复问题。

您将面临的问题是每个系统上的挂墙时间可能不同,此外,从长远来看,它们往往会逐渐分开。除此之外,音频字时钟也不是从墙上时间驱动的,并且会与它有自己的偏差。这意味着您没有机会获得样本或相位精度。IEEE1394 音频流和 MPEG 传输流层都通过将嵌入位精度的时间戳发送到数据流中来实现这一技巧。显然,将以太网、网络堆栈、 Nagel算法和 webSockets 中的任何传输队列结合起来,您不会得到这种奢侈。

10s 到 100ms 可能更现实。

您可能想看看网络时间协议用来解决本质上类似问题的技术。

于 2012-12-23T01:52:28.123 回答
0

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

于 2017-04-07T11:49:33.670 回答