質問

大規模マルチプレイヤーオンラインRPGゲームはどのように構築されますか?

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

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

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

  • 「エンジン」の仕組み競合する何百ものゲームプレイイベントを集中的に処理しますか?

お時間をいただきありがとうございます。

役に立ちましたか?

解決

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

サーバーは、ほぼ99%の時間でLinux、BSD、またはSolaris上で実行されると思います。

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

クライアントが通信するサーバーは、接続を待機するアイドル状態のデーモンまたはサービスを実行するサーバーになります。インスタンス(ダンジョン)の場合、通常、グループごとに新しいプロセスが起動されます。これは、これを管理するディスパッチャサービスがあることを意味します(スレッドプールに類似)

他のプロトコルを使用していますか? HTTPではサーバーがクライアントにデータをプッシュできないためです。

UDPは使用されるプロトコルです。パケットが受信されることを保証しないため、高速です。少しの待ち時間が原因でクライアントがワールドポジションを失うかどうかは気にしません。

「エンジン」をどうするか競合する何百ものゲームプレイイベントを集中的に処理するために動作しますか

ほとんどのMMOには、これを一定の人数に制限するゾーンがあります。 1つのエリアに数百人の人がいる場合、通常は待ち時間が長くなります。サーバーは、送信される数百のスペルに対処する必要があり、各スペルのダメージ量を計算する必要があります。ビッグ5つのMMOについては、10から20の非常にインテリジェントで数学的に才能のある開発者のチームがこの作業に取り組んでいると思います。まだうまくいっていないMMOはありません。ほとんどのプレイヤーは100人を突破しました。

-

Wowemu をご覧ください(公式サイトはありません。危険なサイトにリンクしたくない)。これは、MMAシミュレーターである ApireCore に基づいています。基本的にはWoWプロトコルのリバースエンジニアです。 。これは、プライベートWoWサーバーが実行するものです。私が覚えているのはWowemuです

  • mySQL
  • Python

ただし、ApireCoreはC ++です。

Wowemuのバックエンドは驚くほどシンプルで(ただし2005年に試しました)、おそらくデータベーススキーマの完全な単純化です。何が関係しているのかがわかります。

他のヒント

多くの道路がローマに通じており、多くのアーキテクチャがMMORPGに通じています。

箇条書きの一般的な考え方は次のとおりです。

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

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

全般的にMMOは開発と展開にビジネスのリソースを必要とするため、その時点でMMOは貴重な企業IPであるため、実装について公開されている大量の情報はありません。

かなり確実なことの1つは、MMOは通常カスタムクライアントと3Dレンダラーを使用するため、WebブラウザーではないためHTTPを使用しないことです。オンラインゲームでは、TCP / IPまたはUDPの上に独自のプロトコルが構築されます。

ゲームシミュレーション自体は、ネットワーク化された3Dゲームと同じ手法を使用して構築されるため、その問題領域のリソースを調べて詳細を確認できます。

大父のWorld of Warcraftでは、Blizzardの求人リストではOracleの経験が要件/プラスとして頻繁に引用されているため、データベースがOracleであると推測できます。ユーザーインターフェイススクリプトの作成にLuaを使用します。 C ++およびOpenGL(Macの場合)およびDirect3D(PCの場合)は、ゲームの作成言語であるため、ゲームクライアントの実装言語として想定できます。

実装について議論するのがすばらしい会社の1つは、EveのオンラインクリエイターであるCCPです。 Eveのインフラストラクチャに関する多くのプレゼンテーションと記事を公開していますが、Eveの実装の多くにStackless Pythonを使用しているため、特に興味深いケースです。

http://www.disinterest.org/resource/PyCon2006-StacklessInEve.wmv http://us.pycon.org/2009/conference/schedule/event / 91 /

Eveのアーキテクチャに関する最近のGame Developer Magazineの記事もありました:

https ://store.cmpgame.com/product/3359/Game-Developer-June%7B47%7DJuly-2009-Issue---Digital-Edition

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

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

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

通常、サーバーは、接続されたクライアントからのリクエストを読み取り、ゲームメカニクスを実施するためにそれらを処理し、クライアントに更新を送信するループ内にあります。 UDPは遅延と古いデータの再送信を最小限に抑えるために使用できますが、RPGは通常、ゲームプレイを使用しないため、通常TCP / IPの方が適しています。 CometまたはBOSHを使用すると、WebベースのMMOおよびWebソケットでHTTPを介した双方向通信が可能になり、すぐに適切なオプションになります。

今日新しい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

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

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