マスターサーバ
ネットワーク帯域幅の最小化

Unityネットワーキングサーバのカスタム構築

Suggest a change

Success!

Thank you for helping us improve the quality of Unity Documentation. Although we cannot accept all submissions, we do read each suggested change from our users and will make updates where applicable.

Close

Sumbission failed

For some reason your suggested change could not be submitted. Please try again in a few minutes. And thank you for taking the time to help us improve the quality of Unity Documentation.

Close

Cancel

個別のネットワーキングサーバのソースコードはUnityウェブサイト にあります。Connection tester,Facilitator,マスターサーバ,プロキシサーバも含まれます。

全てのソースパッケージはRakNet 3.732ネットワーキングパッケージを含み,これが基本的なネットワーキング関数をハンドリングし,ネットワーキングサーバが使用するプラグインを提供します。

パッケージには3種類の異なるプロジェクトファイルが含まれていて,コンパイルできます。

  • Mac OS X Xcode 3.0向けプロジェクト
  • LinuxおよびMac OS X向けMakefile
  • Visual Studio 2008ソリューション

XcodeおよびVisual Studioプロジェクトは簡単に開いてコンパイルしビルドできます。Makefileをビルドするにはmakeを実行して下さい。LinuxとMac OS Xの標準コンパイルセットアップとして_gcc_がある場合は動作します。あるいはLinuxではncursesライブラリが必要となる場合があります。

全体構成

マスターサーバ

マスターサーバは内部的な データベース 構造を保持しホスト情報をトラッキングします。)

ホストはRUM_UPDATE_OR_ADD_ROWメッセージ識別子および埋め込まれたホスト情報でメッセージ送信を行ます。LightweightDatabaseServer.cppファイルの_OnReceive()関数でこれは処理されます。ここで全てのメッセージは最初に表示されるため,メッセージがどう処理されたのかトレースしたい場合はこの場所から始めると良いです。MasterServer.RegisterHost をセットする各々_game type_ごとデータベース構造のテーブルが作成されます。全てのゲームタイプ(game type)はひとつのテーブルにグループ分けされ,テーブルが存在しない場合 CreateDefaultTable()_ 関数により動的に生成されます。

ホスト情報のデータはマスターサーバで修正されます。マスターサーバからみた,登録されるゲームのIPアドレスおよびポート情報は,ホストデータに投入されます。この方法により外部IPアドレスおよびポート情報がホストにプライベートアドレス(NATアドレス)を保有する場合も正しいか診断できます。ゲームサーバにより送信されるホストデータのIPアドレスおよびポート情報は,プライベートIPアドレスおよびポート情報であり,後ほど使用するために蓄積されます。もしマスターサーバでクライアントがゲームサーバのホストデータを要求し,サーバが 同じ IPアドレスを保有する場合,次に外部IPアドレスではなくプライベートアドレスを使用します。これによりクライアントとサーバが同じローカルネットワーク上にあり,同じルータをNATアドレスを使用する場合に処理を行うためです。同じIPアドレスを保有し,それを通して接続することは出来ないため,プライベートアドレスを通して接続する必要があり,この場合に正しく動作します。

クライアントはID_DATABASE_QUERY_REQUESTメッセージ識別子および探しているゲームタイプによりメッセージ送信を行います。テーブルあるいはホスト一覧がデータベースからフェッチされクライアントに送信されます。見つからなかった場合,空のホスト一覧が返されます。

マスターサーバに送信される全てのメッセージは CheckVersion() によりチェックされたバージョン情報を保有する必要があります。現時点ではUnityの各バージョンは内部的に新しいマスターサーバのバージョンをセットされ,このときにチェックされます。もしマスターサーバの通信ルーチンがどこかのタイミングで変更となった場合に,古いバージョンをこのときに検知することが出来て,場合によってマスターサーバの別バージョンを参照(必要があれば)するか,違う場合に対応してメッセージ処理を修正することが出来ます。

The Facilitator

FacilitatorはRakNetのNATパンチスループラグインをそのまま用いています。本質的には,ロードされたNATパンチスループラグインを用いた,一つのポートの一つのピア端子(a peer listening)なだけです。NATアドレスをもったサーバととクライアントがともにこのピアと接続してはじめて,NATパンチスルーを実行して互いに接続することが出来ます。Network.InitializeServer がNATを使用するとき,自動的に接続が行われます。

マスターサーバ
ネットワーク帯域幅の最小化