リアルタイムオンラインゲーム用のAMQPまたはXMPP
質問
マルチユーザーオンラインゲームプロジェクト向けのこれらのテクノロジースイート..プロジェクト要件:1。いつでも2K-5Kユーザーを処理できます。 2. iPhoneおよびAndroid用のクライアントライブラリ(ネイティブ、JavaScriptなし)。 3. Microsoft Windowsのクライアントライブラリ(最も重要)、Mac OS XおよびLinuxの場合もあります。 4.特にMOD開発のための優れたドキュメント5.プロジェクトはオープンソースではありません。したがって、適切なライセンスを持つライブラリのみを使用できます。
ErlangとJavaでもプログラムできます。プログラミング言語は問題ではありません。
私は、Openfire、Tigase、Ejabberd、Rabbitmqなどのサーバーテクノロジーをフォローしていました。すべて私のプロジェクトには良いですが、私のニーズ、AMQP、またはXMPPにどんなスイートについてもっと知りたいと思います。
リアルタイムのオンラインゲームに特別に提供するAMQP。 XMPPよりも優れたオプションですか?
解決
Linden Labs(Second Life)の人々は、読むべき多くのメッセージングシステムを徹底的に比較しました。
http://wiki.secondlife.com/wiki/message_queue_evaluation_notes
価値のあることについては、プロジェクトでZeromQを使用していますが、ユースケースに応じてブローカーノードが必要ないため、本当に興味深いです。
他のヒント
XMPPとAMQPの重要な違いは、バイナリコンテンツです。 AMQPはバイナリデータを正常に処理し、XMPPはXML向けに設計されているようです。個人的にはオンラインゲームでは、メッセージのフォーマットと解析にGoogleプロトコルバッファーを使用し、非常に小さなバイナリフットプリントを使用して、AMQPを使用してそれらのメッセージを配信する傾向があります。
ただし、どのAMQPサーバーを使用したいかを検討してください。過去にAMQPサーバーにRabbitMQを使用して噛まれました。 Rabbitmqには、フロー制御機能がまったくありません。そのため、クライアントがサーバーを消費できるよりも速くメッセージを送信している場合、サーバー上のバッファーがいっぱいになり、サーバーを爆破できます。 Rabbitmqのより最近のバージョンは非常に粗い方法でフロー制御を実装しています:彼らは停止します すべて メモリが解消されるまで、システム内の消費者。
Zeromqを試したことはありません。おそらく、私がrabbitmqを使用してきたものの方が良いでしょう...
5Kユーザーは自分の動作についてあまり教えてくれませんが、すべてが同じ10秒のウィンドウ内で1つのリクエストを提出した場合、毎秒500〜1000のリクエストを検討するとしましょう。
比較的低いラップトップでアクティブ/MQを実行していましたが、1秒あたり300のリクエストを簡単に処理しているので、ここで喜んでお勧めします。ブローカーのクラスターをセットアップして、水平方向のスケーラビリティを実現することもできます。 HTTPプロトコル(STOMP)またはそのネイティブバイナリプロトコルを使用できます。 C/C ++、Java、JavaScriptなどのクライアントAPIライブラリもたくさんあります。最初のものがあります AMQPサポート.
あなたは永続的な要件については言及しませんでしたが、私は再び私はほとんどのRDBMSSで十分だと思っていたでしょう。とはいえ、ドキュメント指向のビッグテーブルタイプのデータベースの一部は、水平方向のスケーリングの観点から面白く見えます。
また、Apache Camelは非常にパフォーマンスが高いことがわかりました。強くお勧めします。キャメルは、ロジックレイヤーを実装するために使用されます。
'これが役立つことを願っています。
XMPPはテキストゲームで使用できます。 http://gamerunes.com