2009-03-11 9 views
15

私は、WebブラウザでJavaアプレットまたはフラッシュファイルとして実行できる小さなマルチプレイヤーゲームを構築する予定です。私は前にサーバプログラミングをしていないので、どのような種類のサーバアーキテクチャが必要かと思っています。マルチプレイヤーゲームのサーバーアーキテクチャ?

サーバー上でperl/phpファイルを作成するのは簡単ですが、java/flashコードは、プレイヤーの位置やアクションなどを更新するためにコンタクトします。しかし、私は専用のWebホスト、使用するOS、データベースなどが含まれます。また、使用される帯域幅の量とスケーラビリティが考慮されます。

別のオプションは、クラウドホスティングシステム(専用サーバーとは対照的)を使用している可能性があるため、ゲームの成長に合わせて追加のマシンを追加することになります。各サーバがデータベースを更新するためのコアperl/phpファイルを実行していれば、正常に動作するはずです。

Googleアプリエンジンを使用することもできます。

サーバーアーキテクチャ、OS /データベースの選択、およびサーバー側のプログラミングにperl/php/pythonスクリプトを使用する私の方法が良いものであるかどうかは、ご理解いただけますようお願い申し上げます。

+0

これはどのような種類のゲームですか?これは私たちがあなたを助けるのに役立ちます:) – Uri

+0

それは小さなマルチプレイヤーのRPGゲームになるので、リアルタイムに反してリアルタイムになります:) –

+0

私はあなたが一台のマシンのメモリにすべての状態を管理し、それはデータベース(トランザクション的に?)までです。そのようにすべてのクライアントを同期する方がずっと簡単です。 – Uri

答えて

8

具体的な実装の詳細ではなく、ゲームについて詳しく説明し、アーキテクチャについて詳しく検討する必要があります。

主な質問は、あなたのゲームがリアルタイムで、ターンベースで、またはロングディレイで行われるかどうかです(例:チェスを電子メール)。もう1つの質問は、その後のリロードのために状態をフリーズするかどうかです。

同じゲーム内のすべてのプレイヤーが同じサーバーでホストされるかどうかを事前に把握することを強くおすすめします(たとえば、1000人のプレイヤーのうち4人の試合に比べて4人の試合のうち1000人)。可能であれば、最初のゲームに参加して、同じゲームに参加しているすべての人を同じサーバーの下に置いてください。複数のクライアントを1台のサーバーに同期させるには、複数のサーバーを同期させるのではなく、十分な時間があれば十分です。さもなければ、一貫性の定義には問題があります。

可能であれば、各クライアントとサーバーとの通信を行い、その後サーバーはクライアントに更新を配布します。あなたは1つの「公式の州」を持ち、さまざまな競合解決、ファントムなどを行うことができます。ピアツーピアは、より高速なゲーム(例:FPS)でより良いパフォーマンスを提供しますが、

私の人生にとって、これとperlやPHPを実行する説得力のある理由はありません。あなたのゲームはウェブベースではなく、なぜウェブ指向言語で書くのですか?サーバーには古いJ2EEを使用し、XMLおよびAJAXを使用してクライアントとデータを交換します。可能であれば、サーブレットではなくクライアント上で実際のJavaアプリケーションを実行します。 JMSを使用すれば、多くの通信の詳細を抽象化することで、大きな負担をかけることができます。

+0

クライアントはそれをJavaアプレットとして実行します。サーバーがJavaサーブレットを実行するか、またはサーバーが本格的なアプリケーションを実行する必要があることを意味しますか?そのperl/phpはより一般的でサーバ上でサポートされる傾向があるので、私はそれらの中にサーバコードを作成する方が良いアイデアかもしれないと思った。 –

+0

サーバは完全なアプリケーションでなければならない。メモリ内のクライアント間のシステム状態と同期を管理することができます。 – Uri

+0

通常のWebサーバーでperl/phpを実行すると、クライアントごとに別々のプロセスがあります。高水準言語で複数の要求を処理できるマルチスレッドサーバーを実行すると、操作が簡単になることがあります。 – Uri

6

サーバーアーキテクチャについては、Three Rings' codeをご覧ください。彼らはJava(クライアント側とサーバー側の両方)に数多くの非常にスケーラブルなゲームを書いています。

+2

+1 for Three Rings - www.gamegardens.comもチェックしています。ゲームを作成し、ゲームサーバーを使用するためのフレームワークを提供することで、自分のマルチプレイヤーゲームを作成したい人にとって、素敵で簡単なエントリーポイントを提供します。 – ninesided

0

また、私はPHPを使用することをお勧めしません。また、HTTPはステートレスでおしゃべりでもないので、最高のアイデアはありません。私は現在、大規模なマルチプレイヤーゲームを開発中の会社でしばらく働いていました。バックエンドはプレーンなJVMです(複数のクライアントとクライアントごとに1つのTomcatを介して接続されています)。だから私は少ないデータをあなたがサーバー上で必要な小さなバッファーを転送することを知っている - > 1台のマシン上のより多くのクライアントと少し速い応答。また、セキュリティを考慮して、httpsは非常に高価です、特にあなたがグラフィックやサウンドを転送する必要がある場合。ブラウザ以外のクライアントコンテナを使用した独自のBinnaryプロトコルが最適です(良い選択は開発デバッグ時間に切り替え可能なプロトコルです)。たぶん、複雑に聞こえるかもしれないが、そうではない。

@Sarah nice hint、ありがとう;)

+0

btw three-ringsとgamegardensのリンクがAntiP2Pガーディアンによってブロックされているため、誰もがそれを知っていますか? – tomasb

関連する問題