9

多人数同時参加型オンライン RPG ゲームはどのように構築されますか?

  • それらはどのサーバー インフラストラクチャ上に構築されていますか? 特に、非常に多くのクライアントが接続され、リアルタイムで通信している場合。

  • ページ要求で実行されるスクリプトで管理していますか? または、バックグラウンドで実行され、接続されたクライアントとの通信を管理するインストール済みのサービス?

  • 彼らは他のプロトコルを使用していますか? HTTP では、サーバーがクライアントにデータをプッシュすることを許可していないためです。

  • 何百もの競合するゲームプレイ イベントを一元的に処理するために、「エンジン」はどのように機能しますか?

御時間ありがとうございます。

4

6 に答える 6

5

多くの道がローマに通じており、多くの建築物が MMORPG に通じています。

箇条書きに対する一般的な考えを次に示します。

  • サーバー インフラストラクチャは、スケールアウトする機能をサポートする必要があります... 負荷の増加に応じてサーバーを追加します。ちなみに、これはクラウド コンピューティングに適しています。私は現在、時間帯や時期に応じてスケールアップおよびスケールダウンする必要がある大規模な金融サービス アプリを実行しています。Amazon AWS を使用して、ほぼ瞬時に仮想サーバーを追加および削除します。
  • 私がよく知っている MMORPG は、通信に Web サービスを使用せず (ステートレスであるため)、カスタムのサーバー側プログラム (TCP および/または UDP メッセージをリッスンするサービスなど) を使用します。
  • 彼らはおそらくカスタム TCP および/または UDP ベースのプロトコルを使用します (ソケット通信を調べてください)。
  • ほとんどのゲームは「ワールド」に分割され、同じ仮想世界にいるプレーヤーの数を、1 つのサーバー (おそらく CPU とメモリが多い) が合理的に処理できるゲーム イベントの数に制限します。正確なイベント処理メカニズムは、ゲーム デザイナーの要件によって異なりますが、一般的には、着信イベントが優先キューに入れられることを期待しています (受信時間および/または送信時間によって優先順位が付けられます)。このイベントを無視しますか?")。

これは全体的に非常に大きなテーマです。Amazon.com で、このトピックを扱った本をチェックすることをお勧めします。

于 2009-09-13T20:37:53.170 に答える
1

ソフトウェア エンジニアリングのラジオ ポッドキャストでは、Jim Purbrick との Second Life に関するエピソードがあり、サーバー、ワールド、スケーリング、およびその他の MMORPG の内部について説明しています。

于 2009-09-13T20:37:17.470 に答える
1

従来の MMO は、Linux 上で実行される C++ サーバー アプリケーションに基づいており、OpenGL または DirectX を使用して、バックエンド ストレージおよびファット クライアント アプリケーション用のデータベースと通信します。

多くの場合、クライアントとサーバーにはスクリプト エンジンが組み込まれており、動作を高水準言語で定義できます。EVE は、大部分が Python で実装され、大部分が C++ で高レベルのスクリプトを使用するのではなく、Stackless 上で実行されるという点で注目に値します。

通常、サーバーは接続されたクライアントからの要求を読み取り、それらを処理してゲームの仕組みを強制し、クライアントに更新を送信するループに置かれます。UDP を使用して遅延と古いデータの再送信を最小限に抑えることができますが、RPG は一般に単収縮ゲームプレイを使用しないため、通常は TCP/IP を選択することをお勧めします。Comet または BOSH を使用して、Web ベースの MMO の HTTP を介した双方向通信を可能にすることができます。Web ソケットは、すぐに適切なオプションとなるでしょう。

今日新しい MMO を構築する場合、おそらく XMPP、BOSH を使用し、JavaScript でクライアントを構築します。これにより、ファット クライアントをダウンロードしなくても動作し、XMPP ベースの IM および音声システム (gchat など) と相互運用できるようになります。WebGL が広くサポートされると、ブラウザ ベースの 3D 仮想世界も可能になります。

環境は大きすぎて 1 つのプロセスでシミュレートできないため、通常は、世界の小さな領域をシミュレートするプロセスごとに地理的に分割されます。多くの場合、世界には最適な人口が存在するため、さまざまな人々が使用する複数のコピー (シャード) が実行されます。

オペレーション ディレクターであった Ian Wilkes による Second Life アーキテクチャに関する優れたプレゼンテーションがあります: http://www.infoq.com/presentations/Second-Life-Ian-Wilkes

Second Life テクノロジーに関する私の講演のほとんどは、私のブログ ( http://jimpurbrick.com ) からリンクされています。

于 2011-06-11T16:52:18.470 に答える
-1

Erlangを見てください。これは並行プログラミング言語およびランタイム システムであり、分散型、フォールト トレラント、ソフト リアルタイム、ノンストップ アプリケーションをサポートするように設計されています。

于 2009-09-13T20:38:38.773 に答える