0

この質問がどのカテゴリに該当するかわかりません。おそらく一般的なネットワーク/設計/アルゴリズム。

プロジェクトでは、1 つのサーバーに複数のクライアントが接続されていることを検討しています。しばらくして、すべてのクライアントが接続されると、サーバーは各クライアントに何らかのアクションを実行するように指示するメッセージを送信する必要があります。各クライアントがこのアクションをまったく同時に実行することを保証する必要があります。理論的には、これをどのように行うことができますか? 私が直面する実際的な合併症は何ですか?私のターゲット プラットフォームはモバイルです。

私が考えることができる1つの解決策;

  • サーバーは、各クライアントのラウンドトリップ遅延を積極的かつ継続的に追跡します。この待ち時間が時間の経過とともにあまり速く変化しない場合、サーバーは各クライアントの遅延を補正し、すべてがほぼ同時に実行を開始するようにそれぞれにメッセージを送信できるはずです。より良い方法はありますか?

あまり関係のない質問:クライアント側とサーバー側のイベントが同時に発生しない

4

2 に答える 2

0

簡単にできます。

待ち時間を気にする必要はなく、クライアントで同じマシン時間を必要としません。ここで重要なのは、正確な予定を作成することです。

クライアントはサーバーと通信するため、その逆はありません(ただし、それについては何も言いませんでした)。私はあなたに次の解決策を与えることができます:

クライアントがサーバーに接続するとき、クライアントはローカル時間を送信する必要があります。

サーバーがイベントを設定する時だと判断したとき。各クライアントに、現地時間を含む予定イベントを送信する必要があります。サーバーはこれを計算できます。

次に、各クライアントは、予約の時間が来るまでタイマーを設定することで、いつ何かをする必要があるかを正確に知ることができます.

于 2013-01-26T17:46:28.600 に答える
0

理論上はできますが、実際にはできません。少なくとも、有効なタイムスロットを追加する必要があります。そのアクションが有効であるためには、すべてのアクションがその事前定義されたタイムスロット内にある必要があります。

つまり、基本的に「同じ瞬間」 = 「事前定義されたタイムスロット」です。定義済みのタイムスロットは、同じ瞬間またはリアルタイムに近い任意の値にすることができます。

于 2013-01-26T17:46:37.803 に答える