2011-06-21 5 views
4

プロフェッショナルXMPPの全484ページを読んで、ロスト+ XMPPに関する数え切れないほどのフォーラムスレッドを読んだことがあります。この疑問はまだ解くのに苦労しています。私はベストプラクティスの洞察を探しているので、少なくともどの方向に入るかを知っています。XMPPマルチプレイヤーゲーム:相手を名簿の連絡先として保存する必要がありますか?

私はクロスプラットフォーム(ウェブ、iOS & Xbox)のターンベースのボードゲームを構築しています。各プレイヤーは、最大100種類のマッチを任意の時点でアクティブにすることができます。そのため、1つのゲームからスキップすることができます。

ゲームには、アクティブなゲームのリストが表示され、そのゲームの相手の名前とオンラインステータスが表示されます(対戦相手は3人まで、ゲームあたり合計4人までです)。

さらに、各プレイヤーは、オンライン状態を示す別の領域からアクセスできるフレンドリストを持ちます。

私はプレイヤーには完全に透過的なXMPPを使用していますが、誰もJabberクライアントなどでサインインすることはありません。私は情報がどのように表示され利用されているかを完全に制御しています。

XMPPを使用して解決する主な側面は、対戦相手が移動したときの通知、友だちのオンラインステータスの表示、相手のオンラインステータスの表示、ゲーム内のテキストチャットです。

ここで私は問題が発生します:友人のリストはあなたの名簿の連絡先になるはずですので、オンライン状態を見ることができます。しかし、相手はどうですか?これらは通常ランダムな対戦相手であり、あなたは一度だけ試合を行い、もう一度試合を繰り返すことはありません。しかし、あなたとの試合は2週間まで続くことがあります。

すべてが舞台裏であることに注意してください(例:自動定期購読確認など) - ゲームの進行中に各対戦相手をあなたの名簿の別のグループに追加してから削除することをおすすめしますゲームが完了した後にそれらは?そうすれば、そのプレイヤーがオンラインのときにプレゼンス通知を受け取ることができます。あるいは、これはPubSubを利用できるケースですか?

マルチユーザチャットの使用も検討されていますので、いつでもサブスクリプションなしですべてのユーザーのオンラインステータスにアクセスできますが、オンラインで最大20k人のプレイヤーがオンラインになる可能性は非常に低いようです。間違いなく、携帯電話のバッテリー豚のようにも聞こえます。

私の他の解決策は、株価リストを使用することです。各ゲームの名簿リストを作成し、そのリストを各プレイヤーに割り当てます。その後、ゲームが完了したら共有名簿リストを削除します。

+0

使用しているXMPPサーバーはどれですか? – Alam

+0

現時点でのejabberd2の最新安定版です。昨晩ダウンロードしてインストールしましたが、私は何かに切り替えるために開いています。 –

答えて

3

私はここでPubSubのを選ぶだろう。もちろん、これはあなたがサーバー側の作業を余儀なくされなければならないことを意味します。

directed presenceを相手に送信します。これにより、あなたの存在を見ることができます。

+0

私は、サーバー側のソリューションを実装して各ゲームの共有名簿グループを自動的に作成し、すべてのプレーヤーを追加し、ゲームが完了したらそれを破壊するというアイデアを思いついた。 私がこのルートに行く場合、プレイヤーがゲームに参加しているときにMUCを使用し続ける必要がありますか?チャット画面はボードの隣にあり、そのゲームのすべてのプレイヤーが見ることができます。ゲームにはプライベートメッセージはありません。 –

+0

私は共有ロスターで多くのテストをしましたが、少なくともeJabberd2では脆弱です。プレイヤーAとプレイヤーBが既に互いに加入しているとします。 A、B&Cはすべて一緒にゲームを開始するので、3人のプレーヤーすべてを含む名簿グループが作成されます。プレイヤーAとBの両方がプレイヤーCのプレゼンス通知を得ることができます。ただし、ゲームが完了して共有名簿グループを削除すると、共有名簿のすべてのメンバーに「利用不可能」なプレゼンス通知が送信されます私のグローバルロスター。私のアプリケーションとiChatで起こります。 –

+0

私は最後のコメントであまりにも早く話したと思います。以前は、テスト用のユーザーを共有名簿グループから削除しようとしていました。これは、「利用できない」プレゼンス通知を引き起こします。実際に共有名簿グループを削除すると、グループ内の全員がサインアウトするまでお互いの存在を見ることができます。再度サインインすると、共有グループは表示されなくなります。これはソリューションの大きな部分である可能性があります。 –

2

私は、各ゲームにマルチユーザチャットを使用し、ゲーム状態メッセージを処理するためにMUCプロトコルにあなた自身の拡張機能を使用することを検討します(相手は動いています)。ユーザーは「グローバル」レベルで友だちのリストを持つことができますが、MUCレベルを使用して(相手を友人として追加することを決断しない限り)相手と通信することができます(プレゼンスを受信できます)。

も参照してください:Advantages of Pubsub versus MUC

+0

私はこれを可能性として確かに考えていました。私が100回の試合を行った場合、それは試合を開いたときに私のゲームのすべての100のために原子的にMUCに参加することを意味するでしょう。それはXMPPに関してはかなり効率的ですか? 私はモバイルに最も関心があります - Obj-C用の共通のXMPPライブラリを使用し、ゲーム用のiPhoneアプリを開いていると仮定すると、ゲームが開いているときはいつでも100 MUCに接続されます。私は、バッテリーをあまりにも消費しないで、デバイスの応答性に影響を与えないアプローチを行っていることを確認したいと思います。 –

0

このシナリオでは、MUCS(インスタント)を使用する方が良いことに同意します。あなたが不要な加入者のpubsubノードをクリーンアップする必要がある場合、間違いなく尻に痛みがあります。

関連する問題