2012-02-27 14 views
0

私はTCPソケットを使ってネットワークフラッシュゲームに取り組んでいます(TCP b/cを強制的に使用しています)。それは主にテキストベースのゲームなので、ゲームはかなりシンプルです。強制されなければならない唯一の実際の同期は、各クライアントのカウントダウンタイマーです。このタイマーは60秒に開始し、0にカウントダウンし、0でゲーム状態の変化が起こるので、すべてのクライアントが同じ時刻に0になることが重要です。TCP - クライアントの同期

私のサーバーからすべてのクライアントに "start countdown"コマンドを送信してクライアントシステムクロックを使用することができましたが、パケットがドロップまたは遅延した場合、クライアントは他のクライアントと同期できなくなります。また、クライアントが毎秒(またはそれ以下)サーバーに「チェックイン」する必要があり、サーバーがすべてのクライアントの同期を強制するクライアント/サーバープロトコルを実施することもできます。私の懸念事項は効率です。私のゲームはペースが遅いテキストゲームなので、一度に最大30秒間サーバーに送信するデータがクライアントにない可能性があります。

「常にチェックインしている」という状況を避けることはできないかもしれませんが、Flashアプリケーションの複数のクライアント間でタイマーを同期させるための効率的な解決策を紹介してくれることを願っています。

ありがとうございます。

P.S.私はNTPがフラッシュで可能だとは思わない。

答えて

0

クライアントの一部が後退している状況を想像してください。何をしますか?

つまり、完璧な同期がありますが、カウントダウン中にクライアントの1人がオフラインになってしまいます。イベント全体がキャンセルされているのですか、または残りのクライアントはまだ「参加していますか?

ビデオストリーミングサーバーがビデオをFlashにストリーミングするために使用するメカニズムがあります。彼らは固定サイズのパケットを何度も送信し、前後に移動するのにかかる時間を測定します(Flashクライアントは固定サイズのパケットでも応答することになっています)。これにより、サーバー時間とクライアントの間に存在する遅延を記録できます。可能であれば、クライアントごとにルックアップテーブルを作成し、遅れを考慮したメッセージを送信することができます。それが十分でない場合は...科学的研究のカテゴリではなく、ゲームではないようです。ソフトウェア/プラグインは問題にならないでしょうか?

+0

返信いただきありがとうございます。私はこれがうまくいくのだろうかと思っている:私は、サーバーが独自のタイマーを開始し、すべてのクライアントに自分のシステムで同じタイマーを開始するように指示している。サーバーは、タイマーのカウントダウンを過ぎて来たクライアント要求を無視して、クライアントが2番目または2番目に遅れていて何らかの無効な要求をしないようにします。 –

関連する問題