1

最初に私の問題を説明します: node.js サーバーと、socket.io を介してイベントを受信する多くの JS クライアントがあります。Web アプリケーションは終了日 (タイムスタンプ) を node.js サーバーに送信し、node.js はこのタイムスタンプをすべてのクライアントにブロードキャストします。次に、クライアントは今から指定された日付までタイマーを起動します...

私の問題:私の顧客は完全に同期されたアプリケーションを望んでいるので、各クライアントは常に同じタイマーカウントでなければなりません...しかし、各クライアントの現在の日付は同じではないため、タイマーカウントが異なります。

私の最初の解決策: 私の Web アプリは、リクエストごとに現在のタイムスタンプを送信するため、node.js はこのタイムスタンプをブロードキャストします。次に、各クライアントは現在のタイムスタンプをサーバーのタイムスタンプと比較し、その差をタイマーに適用します...

結果 : 良くなりましたが、完全ではありません。一部のタイマーは同期していません (私の意見では要求の遅延のため)。数ミリ秒 (1 秒未満) の違いが見られます。

それで、タイマーを改良する提案はありますか?

みんなありがとう。

4

1 に答える 1

1

パケット交換ネットワークを介した時刻同期は、ネットワーク内のノード間の伝送遅延を認識できないため、困難な問題です。私の提案は、この問題を自分で解決しようとしないことです。サーバーとすべてのクライアントが NTP を実行しており、適切な構成で信頼できるソースと時刻を同期できるようにする必要があります。問題は NTP に任せましょう。

于 2013-02-04T18:20:02.873 に答える