質問

私はマルチプレイヤーゲームを作りました。これで、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 - Mobile Devices +ブラウザを使用してすべての種類のクライアントにサービスを提供できます。

2.4)高速 - 1秒間のサーブレットコンテナでさえも、毎秒数千の要求に応えることができるので、本当に速いです。

2.4)しかし、このアプローチは全二重通信を提供することができません。アップデートを確認するには、1秒ごとに要求を送信する必要があります。 1秒の遅延は、それがターンベースのようにゲームの違いを多くしませんが、それでもそれは多くのトラフィックを生成します。多くのプレイヤーが遊んでいるときにそれは実現可能ですか?私はいくつかの彗星の技術について聞いたが、サーバが行で多くのメッセージを押す必要があるのであれば、私はまだ要求を送信しなければならないので、このテクノロジはまだ確立されていない。

3)ソケットの作成とJMSを介してJava EEサーバへの接続。

3.1)クライアントとサーバ間の全二重通信が可能なので、Java EEのすべてのクール機能を提供するため、クール。後でサーブレットインタフェースを介してブラウザに拡張できます。

3.2)何らかの順位の高いようです。それは本当にそれをする方法ですか?私は正しい方法でさえも意味ですか? Sane Developerがそのようにそれをしますか?

あなたは私を選択して私を助けてください。私はそのようないくつかの仕事をすることに多くの経験がありません。そしてベストプラクティスに固執したいのですが。

役に立ちましたか?

解決

なぜあなたが棚から降りることができるものを書き直すのですか?

reddwarf server (http://en.wikipedia.org/wiki / PROJECT_DARKSTAR ">プロジェクトダークスター)?

RedDwarf Serverは、大量マルチプレイヤーオンラインゲームのサーバーサイドを開発するためのオープンソースミドルウェアソリューションです。それはSun Microsystemsによってサポートされ管理されているオープンソースプロジェクトであるProject Darkstarの公式コミュニティフォークです。 - reddwarfのウィキペディアの記事

Reddwarfのドメインは今日(2013-06-12)のように見えますが、まだ wiki があります。 github repo

Reddwardはその哲学と目標を次のように提示します。

  • ゲーム開発者に透過的な方法で、サーバーサイドのゲームコードを信頼性、スケーラブル、永続的、およびフォールトトレラントにします。
  • は、開発者に単純なシングルスレッドイベント駆動型プログラミングモデルを表示します。さまざまなイベントを処理するコード間の相互作用により、開発者は自分のコードが失敗することはありません。 reddwarfチュートリアル

これは、サーバコードがシングルスレッドであることを意味しないというわけではなく、ゲーム開発者の観点から抽象化されています。 reddwarfチュートリアルは、Reddwarfができることに関するものです。その多くの設計決定の多くを説明し、明確にします。

あなたのための1つの懸念は、しかし、私がチェックする前回チェック(2011年)をチェックする(2011年)。

からスクラッチ

これは、学習経験を大切にするならば、あなたがスクラッチからこれらのことをほとんどのものにしようとするのを止めるべきではありません。しかし、これは大きな努力であり、かなり時間がかかるでしょう、そしてあなたがあなたの質問で述べたように、これらの問題のいくつかは技術的なスタックではかなり低いレベルであり、あなたのコードの複雑さを大幅に増やすでしょう。維持する必要があります。

しかし、あなたの3つの選択肢に関しては、あなたの最初のものは私にとって最善のようです、あなたが自家製の実装に行くことになっていたら。オプション2(HTTPサーブレットを使用)は、一部のゲームに適応しているようですが、まだA MiddleWareに委任中に自分自身を実装することが比較的まともな代替手段である可能性があると思います。これは、ロードを処理するための多くのWebサーバー追加から利益を得ることができます(キャッシュモジュールなど...)。オプション3(JMS + JEEを使用)は、確かに終了したようですが、あなたが念頭に置いているものを知らずに確かに知るのは難しいです。

そしてあなたが学ぶことを試みるためにここにいれば、明らかにオプション1は多くの地面をカバーするでしょう。しかし、それはかなり上向きの戦いになるだろう。

他のヒント

1.1) you can't think in term of one Thread by user. Depending of machine configuration but you could load thousands of threads but it will not scale and lose a lot of time in Thread context switch. Better think NIO Netty like framework with few incoming and outcoming Thread pool executor that perform incoming messages under milli second execution.

1.2) You can simply scale by putting in front of you game server a loadbalancer component that can forward incoming player to right server according their load

1.3) NIO can handle thousands to to millions connection on a single box. Don't worry with this.

2.1) Manage your player sessions and 2.2) be away of EJB architecture. It will eat all your box power instead of allocating power to your game which is your goal.

2.3) HTTP can serve all clients but if you run realtime game i encourage to use binary socket and keep HTTP only for loadbalancing , login , stats and fallback when can't establish a socket connection.

2.4) Socket based server can handle hundred thousands incoming message per second. This is the property of low latency system

While it's very interesting to dive in building such system. What is your goal? Learn to build such system or succeed your game?

Many java multiplayer game server technology framework already exist. SmartFox Server, ElectroTank...

We have our own java high load Nuggeta multiplayer crossplatform java game server that addresses all points discussed above and much more. If you wanna try it it's free.

If your goal is to write a game server it's awesome venture that can takes long time but very exciting. If your goal is to succeed your game. Pick up among Java game server SDK already existing.

ライセンス: CC-BY-SA帰属
所属していません softwareengineering.stackexchange
scroll top