0

マルチプレイヤーのサポートを必要とする Windows Phone ゲームがあります。マルチプレイヤーは Wordament のものと似ています。全員が同じゲームをプレイします。クライアントは最初にゲームを取得し、各プレイヤーは他のプレイヤーとの対話なしで自分でゲームをプレイし、ゲームが終了すると、全員からの結果が収集されて表示されます。違いは、私のアプリケーションでは、指定された時間が経過してもゲームは終了せず、クライアントの 1 つが通知したときに終了することです。したがって、誰かがゲームを完了する (目標に到達する) と、他のすべての人に誰かが勝ったことを通知する必要があります。

私の最初の考えは、ゲームの状態が変更されたかどうかを確認するために、5 秒ごとにサーバーをプールすることでした。クライアントがゲームを完了すると、その情報を含むリクエストが送信され、他のすべてのクライアントは次のプール リクエストで新しいステータスを取得します。これ (IMO) は、ゲームが終了したかどうかを知らせる 1 バイトのデータだけが必要なため、最も単純で便利なソリューションです。

リアルタイム (ミリ秒単位の精度など) は重要ではありません。前の段落でお気づきかもしれませんが、5 秒の遅延は許容されます。

ただし、専門家の皆さん、このシナリオにはデュプレックス チャネルの方が適切かどうかお尋ねします。双方向チャネルを提供する Pusher のようなソリューションを見つけましたが、そのようなソリューションは非常に複雑で費用がかかるように思えます (予算が非常に限られています)。

4

1 に答える 1

1

私の現在の知識を共有します。

Pull(Poll)
実装が簡単で、広く使用されています。
例: Facebook.com、TeamCity Web インターフェイス、QPID メッセージ ブローカー用の .NET クライアント

プッシュ
この記事を見てください
Microsoft Silverlight 3 での HTTP ポーリング二重サーバー側チャネルのパフォーマンス
私自身が気づいたこと: 構成に余分な労力が必要であり、スケーラビリティとパフォーマンスに問題が発生する可能性があり
ます 私が考えることができる唯一のシナリオ - の交換常時大量のデータ
例: 大規模な多人数参加型オンライン ゲーム (膨大な数のイベント、通知時間が非常に重要)

オンデマンドで変更を取得する
ビジネス デスクトップ アプリケーションの典型です。
例: TFS (グリッドの更新 (タスクとバグ)、チェックアウト時にロックされたファイルのステータスを取得)

結論: タスクのプーリングは理想的です

于 2013-06-05T09:05:54.790 に答える