マルチプレイヤーゲームを作っています。今、Androidデバイスをサーバーに接続するテクノロジーを選択しようとしています。クライアントは Android で動作し、ゲームは MMORPG です。サーバーをJavaで書きたいと思います。今のところ、私はそれについて3つのアイデアしか持っていません:
1) プレーン Java とソケットを使用したマルチスレッド環境の作成。これにより、ゲームクライアントとサーバー間の全二重接続がより簡単になります。しかし、次の懸念があります。
1.1) ゲームは多数のオブジェクトを持つ MMORPG であり、たとえば 5000 人が同時にプレイしている場合、そのようなソリューションがどのようにスケーリングされるかわかりません。Java マシンで実行できるスレッドの数は? どうすればそれを概算できますか?1 つのスレッドが各ソケットを読み取り、1 つのスレッドがソケットに書き込みを行っている場合 (つまり、1 人のプレイヤーに対して 2 つのスレッド)。
1.2) プレイヤーの数が増えた場合、自分で作成した jar アーカイブを拡張して複数のサーバーに配布するにはどうすればよいですか? たぶん、それを行うための特別なトリックがありますか?
1.3) 多くのプログラミング オーバーヘッド - ソケット API は非常に低レベルです。
2) HTTP 要求を処理するためのサーブレット インターフェイスを作成します。
2.1) 各プレイヤーが自分のセッションを持っている限り、セッション (および承認) を簡単に制御できます。
2.2) は、Java EE EJB などに接続できます。システム レベルのプログラミングに伴う多くの複雑さが解消されます。そのため、ビジネス ロジックの作成に専念できます。
2.3) HTTP を使用するすべてのタイプのクライアント (モバイル デバイス + ブラウザー) にサービスを提供できます。
2.4) 高速 - 1 つのサーブレット コンテナーでも 1 秒あたり数千のリクエストを処理できるため、非常に高速です。
2.4) しかし、このアプローチは全二重通信を提供できません。更新を確認するために、1 秒ごとにリクエストを送信する必要があります。ゲームはターン制であるため、1 秒の遅延はゲームに大きな影響を与えませんが、それでも大量のトラフィックが生成されます。プレイ人数が多い場合は可能ですか?COMET テクノロジーについて聞いたことがありますが、サーバーが多くのメッセージを連続してプッシュする必要がある場合でも、毎回リクエストを送信する必要があるようです + このテクノロジーはまだ十分に確立されていません。
3) ソケットを作成し、JMS を介して Java EE サーバーに接続します。
3.1) クライアントとサーバー間の全二重通信を可能にし、Java EE のすべての優れた機能を提供するため、クールです。後で、サーブレット インターフェイスを介してブラウザに拡張できます。
3.2) ある種のオーバーエンジニアリングのようです。それは本当に人々がそれをする方法ですか?つまり、それは正しい方法ですか?正気の開発者がそんなことをするだろうか?
選択の参考になれば幸いです。私はそのような仕事をした経験があまりありません。そして、ベストプラクティスに固執したいと思います。