複数のマシンで Websocket を介してトリガーできる js ビジュアル メトロノーム (コンダクターのような) を備えたサイトがあります。メトロノームの開始をできるだけ同期させるにはどうすればよいですか?
ありがとう。
複数のマシンで Websocket を介してトリガーできる js ビジュアル メトロノーム (コンダクターのような) を備えたサイトがあります。メトロノームの開始をできるだけ同期させるにはどうすればよいですか?
ありがとう。
私がすることは、レイテンシーを測定し、それに応じて補正することです。
サーバーへの接続ごとに、サーバーは定期的にpingメッセージ(実際のICMP pingではなく...確立されたWebSocketチャネルを介したメッセージのみ)を送信し、クライアントから応答を返すのにかかる時間を測定する必要があります。この待ち時間を2で割ると、メッセージがサーバーからクライアントに到達するまでにかかる時間について適切な推測ができます。
これがわかれば、2つのクライアント間のタイミングの違いを見積もり、それに応じて調整できます。
これは決して完璧ではないことに注意してください。私はあなたのメトロノーム時計を完全にクライアント側に維持し、サーバーとの通信のみを使用して調整します。これにより、ユーザーのパフォーマンスがよりスムーズになります。
これはクロックリカバリの問題です。
あなたが直面する問題は、壁時間はシステムごとに異なる可能性があり、さらに、長期的にはばらばらになる傾向があるということです。これに加えて、オーディオの単語時計も実時間から駆動されておらず、それ自体がドリフトします。これは、サンプルまたは位相の精度を達成する可能性がないことを意味します。IEEE1394オーディオストリーミングとMPEGトランスポートストリームレイヤーはどちらも、ビット精度が埋め込まれたタイムスタンプをデータストリームに送信することで、このトリックを実現します。イーサネット、ネットワークスタック、 Nagelアルゴリズム、およびwebSocketの送信キューの組み合わせでは、明らかにこの贅沢は得られません。
10秒から100ミリ秒の方が現実的かもしれません。
ネットワークタイムプロトコルが本質的に同様の問題を解決するために使用する手法を確認することをお勧めします。