6

ブラウザベースのフラッシュフリーの JavaScript を使用したリアルタイムのターン制ゲームで、AMQP (RabbitMQ) と XMPP (eJabberd) のどちらかを選択しています。AMQP と XMPP プロトコルについてはよくわかりません。ユーザー認証と MySQL でのデータストア取得に PHP を使用したいと考えています。私の知る限り、RabbitMQ には PHP クライアントがありますが、eJabberd にはありません。

私が理解したのは、javascriptクライアントがPHPスクリプトを呼び出して必要な処理を操作し、AMQPまたはXMPPサーバーに渡して相手プレイヤーにデータを渡すことです。Wrox の「Pro XMPP Programming with JS and jQuery」という優れた本がありますが、PHP の例はありません。以下は私の質問です。

1) 私のゲームにはどのプロトコルが適していますか?

2) PHP クライアントのサポートのためだけに、RabbitMQ を選択しますか?

4

3 に答える 3

9

XMPP BOSH への HTTP Bind アプローチを使用して、Javascript で XMPP クライアントを実装することにかなり成功しました。AMQP については知りませんが、クライアント側のアクセスには XMPP が気に入っています。その理由を一言。

ejabberd にはすでに BOSH サポートが含まれており、Javascript (およびおそらく Flash) を使用するには、ejabberd が HTTP 要求をリッスンするように構成したポートに要求をリダイレクトするようにサーバーに指示するだけで済みます。(これも、今日のブラウザの Javascript セキュリティ モデルが、異なるドメインや異なるポートへの Javascript リクエストを禁止しているためです。)

XMPP は非常に単純な小さな XML ドキュメントの集まりであるため、選択した任意の言語でそれらをエンコードするのは非常に簡単です。

広くサポートされているため、ユーザーにサービスへの登録を要求する必要がなくなる可能性があります。

XMPP を実装すると、ゲームにインスタント メッセージングのサポートを簡単に追加でき、Jabber ネットワークの残りの部分 (Google トークを含む) とフェデレーションできます。

私は AMQP について何も知らないので、それらを比較することはできませんが、将来のマルチプレイヤー プロジェクトで常に最初に XMPP を検討する理由は言えます。


私の個人的な選択理由ejabberdは単純です。Debian へのインストールと設定が非常に簡単だからです。私は、Erlang と Java にほとんど完全に慣れていません。しかし、Erlang について私が理解しているのは、スケーラビリティを容易に達成できるというejabberdことです。人々はそれを達成したと言っています。

サーバー側のロジック チェックを行いたい場合は、申し訳ありませんが、適切な方法を知りません。私はプロキシ PHP スクリプトを使用して、着信 XMPP BOSH メッセージのサニティ チェックを行い、Apache のmod_rewrite.

上記のようにmod_rewrite、XMPP サーバーは「メイン」Web サーバーとは異なるポートでリッスンし、Javascript クロスドメイン セキュリティ モデルを使用するため、(PHP またはその他の方法で) 何らかのプロキシを行う必要があります。XMLHTTPRequest別のポートで行うことはできません。

そのため、選択した XMPP サーバーに BOSH 要求を中継する際に、サニティ チェックを行うのが最も簡単な場合があります。サーバー ソフトウェアを掘り下げることは、この種のチェックを行う最善の方法ではない場合があります。時間がかかり、ゲームの他の部分との統合が難しくなる可能性があります。

または、 XMPP コンポーネントと ejabberd モジュールについて言及している回答に出くわしました。これは私にとっても興味深い読み物になるでしょう。

頑張ってください。ゲームが完成したら、必ずゲームの名前をコメントに残してください -- ぜひ見てみたいです :-)


他の誰かがあなたと非常によく似た質問を投稿したことに気づきました。その回答には、さらに興味深い情報が含まれています。


Flash で XMPP を使用する場合:

それでも、Flash で HTTP バインディング (BOSH) を使用できます。実際、HTTP バインディングは Javascript が XMPP にアクセスできるようにしますが、切断されることが多いモバイル接続など、さまざまなアプリケーション向けに考案されました。

Web ベースのクライアント JWChat と ejabberd 間の通信 (BOSH に関する情報) と、クロスプラットフォーム クライアント Psi と ejabberd 間の通信 (プロトコル自体に関する情報) を観察することで、接続を確立する方法をほぼ理解しました。JWChat と WebKit の Web Inspector、または Firefox の Firebug を使用すると、サーバーに対して行われる XMLHttpRequests を簡単に追跡できます。Psi を使用すると、XML コンソールをオンにして、通信ログを読み取ることができます。選択した言語でクライアントのプロトタイプを作成することと組み合わせると、BOSH と XMPP の学習は非常に簡単であることがわかりました。

また、次の XEP も役立ちます: XEP-0124XEP-0206

私が今読んでいる O'Reilly の本、「XMPP: The Definitive Guide」 (P. Saint-Andre、Kevin Smith、Remko Tronçon; Apple の App Storeでははるかに安い) も、「なぜ物事が行われるのか」という感覚を与えてくれます。ありのまま」であり、XMPP の多くの小さなことやさまざまなアプリケーションについて説明しています。

その後、BOSH ベースのクライアントの実装はかなり簡単になる可能性があります。ボタンの再生と一時停止を行う以外に、Flash を使用したコーディングの経験がないので、これは大まかに考えてください :-)

于 2010-10-08T22:42:21.280 に答える
1

誰かが言ったように、クライアントからサーバーへの部分を考慮する必要があります。それはより重要なようです。

このテーマに関する最高の本 (Jack Moffit の XMPP + JS の本) を既にお持ちのようですが、私は間違いなくそれが最適なテクノロジであると言えます。

また、この本で説明されているように、ユーザー認証、暗号化、およびそれに加えて多くの XMPP プロトコル拡張を利用できます。

PHP-XMPP クライアントを推奨することはできませんが、AMQP と同じレベルの機能をすぐに使えるとは限りません。

また、他の言語に精通していて、必要なゲーム ロジックの量に応じて、XMPP サーバー コンポーネントを作成することもできます。情報については、XMPP + ゲームに関するこの前の質問を参照してください:
XMPP C# Interaction

于 2010-05-30T21:14:08.047 に答える
1

AMQP はまだバージョン 1.0 に達しておらず、いくつかの設計上の問題がある可能性があります。PHP 用の XMPP クライアントがあるので、私があなたならまずそれを試してみます。

于 2010-05-30T16:43:17.523 に答える