Photon Server設定
この章ではPhoton Serverのためにファイルやフォルダがどのように構成され、設定されるかを説明します。
必要なものはすべてデプロイフォルダの中にあります。
サーバーとアプリケーションの構成
以下のフォルダには4つのバージョンのPhotonが含まれています: 「binWin32」、「binx64」、 「binWin32xp」、「binwin64xp」。
これらをbinaries-folderと呼びます。
Photonでは、アプリケーションごとにbinaries-folderの隣に個別のフォルダを設置する必要があります(例:「deploy\Loadbalancing」フォルダ)。
アセンブリは"bin"サブフォルダに入れてください (例:「deploy\Loadbalancing\bin」)。
Server SDKのdeployフォルダ内の以下のフォルダはアプリケーションです:
CounterPublisher, Loadbalancing, MmoDemo, Policy
アプリケーションは以下のように、Photonの設定ファイルで設定されます。
「bin_tools」フォルダには便利なツールが含まれています:
- 7zip: デバッグをファイルに圧縮する際に使用する、アーカイブ作成/抽出ツール
- baretail: お勧めの無料ログビューアー。 最新のログを確認するためにPhotonControlで使われます。
- firewalltool: Windows FirewallでPhoton用に自動的にルールを設定するツール。
- perfmon: ファイルにカウンターログを設定する際に使用する、PerfMonカウンターのリストが含まれています。
詳細はこちらを確認してください。 - stardust.client: マシンに負荷を取得するのに使用できるコマンドラインのテストクライアント。Photonを5分で開始で説明されています。
設定: PhotonServer.config
Photonのメインの設定ファイルはPhotonServer.configです。
SDKの各binaries-folderに同一のコピーが含まれています。
このファイルはアプリケーション、IPのリスナー、パフォーマンス特有の値を設定するために使用されます。
ゲームロジックの設定値は含まれていません。
デフォルト値はPhotonがより多くのコアでスケールできるようにしますが、通常のマシンよりも優先されることはありません。
基本的に、パフォーマンスの調整は不要です。
以下は、もっとも一般的に使用される設定です。
さらに多くのオプションが、Photon Server Config設定ページに記載されています
アプリケーションノード
設定ファイルは、Photonが起動時にどのアプリケーションを読み込むかを定義します。
「Applications」ノードでは、複数の「Application」エントリを追加することができます。
XML
<Applications Default="Master">
<Application
Name="Master"
BaseDirectory="LoadBalancing\Master"
Assembly="Photon.LoadBalancing"
Type="Photon.LoadBalancing.MasterServer.MasterApplication"
ForceAutoRestart="true"
WatchFiles="dll;config"
ExcludeFiles="log4net.config"
>
</Application>
<Application
Name="Game"
BaseDirectory="LoadBalancing\GameServer"
Assembly="Photon.LoadBalancing"
Type="Photon.LoadBalancing.GameServer.GameApplication"
ForceAutoRestart="true"
WatchFiles="dll;config"
ExcludeFiles="log4net.config">
</Application>
<!-- CounterPublisher Application -->
<Application
Name="CounterPublisher"
BaseDirectory="CounterPublisher"
Assembly="CounterPublisher"
Type="Photon.CounterPublisher.Application"
ForceAutoRestart="true"
WatchFiles="dll;config"
ExcludeFiles="log4net.config">
</Application>
</Applications>
</LoadBalancing>
各アプリケーションには、クライアントが接続時に参照するための名前が割り当てられます。
BaseDirectoryは、アプリケーションが存在するフォルダを定義します。
「\bin」フォルダに名前はつけませんが、慣習から名前を予期します。
Assemblyはアプリケーションの.dllファイルに名前を付け、 その"main"クラスを入力します(Photon.SocketServer.Applicationから派生)。
設定ForceAutoRestartがtrue
に設定されると、アプリケーションを再起動して、すべての既存の接続を切断するようPhotonに伝えます。
しかし、EnableAutoRestartがtrue
に設定されると、Photonは読み込まれたアプリケーションのシャドウコピーを開始します。
これにより、開発者が問題をロックせずにファイルを置換できるので、開発の利便性が高まります。
Photonは、ファイルが変更された10秒後にアプリケーションの新しいインスタンスを自動的に起動します。
以前のシャドウコピーに接続しているクライアントは、そこに残ります。
新しい接続は新しいロジックを使用します。
どちらの場合も、WatchFilesとExcludeFilesは再起動をトリガーするファイルのリストを調整します。
RestartDelayMilliseconds設定を使用して再起動の遅延を設定できます。デフォルトでは、1,000ミリ秒です。
プラグインの開発では、デバッグモード(Visual Studioでは「F5」)を使用してIDEから直接Photon Serverを実行することを推奨します。
複数のアプリケーションを読み込むには、アプリケーションノード(固有の名前を持つ)を追加します。
そのうちの1つにアプリケーションの名前をつけて デフォルトのアプリケーションとすることが出来ます(この例では、「Master」)。
デフォルトのアプリは、不明なアプリケーションへの接続を試行するクライアント用のフォールバックです。
PhotonServer.configで設定されていないアプリケーションは 読み込まれないためデプロイする必要はありません。
アプリケーションが設定ファイルに含まれているが、ファイルが不足している場合にはPhotonは起動せずログに問題を出力します。
UDPListenersとTCPListenersノード
これらはそれぞれ、UDPおよびTCPエンドポイントをマシンに設定します。
どちらか(例:UDPのみ)、または両方を使用することができます。
デフォルトのIP 0.0.0.0により、Photonはローカルで利用可能な任意のIP上でリッスンします。
ワイルドカードIPアドレスを置き換えることで、Photonは、特定のIPとポートのみを開きます。
複数のUDPListenerとTCPListenerノードを定義でき、 いくつかのIP/ポートの組み合わせを開きます。
UDPListenerとTCPListenerノードごとに、OverrideApplicatioまたはDefaultApplicationを設定することができます。
Overrideの意味:このポートに接続するクライアントは何に接続していても、 指定されたアプリケーションに到達します。デフォルトは、クライアントによって指定されたアプリケーションが見つからない場合に使用するフォールバックです。
XML
<UDPListeners>
<UDPListener
IPAddress="0.0.0.0"
Port="5055"
OverrideApplication="Master">
</UDPListener>
<UDPListener
IPAddress="0.0.0.0"
Port="5056"
OverrideApplication="Game1">
</UDPListener>
</UDPListeners>
デフォルトのUDPポートを変更
Unity/ UDPのデフォルトポートは、次のとおりです:
マスターアプリケーションは5055.ゲームサーバーアプリケーションは5056です。
- 5055はマスターアプリケーション用
- 5056はゲームサーバーアプリケーション用
これらのポートを変更するには、以下の手順が必要です。
「deploy\bin_[Win_version]」でPhoton Server設定ファイルを開きます。
XML
<UDPListeners>
<UDPListener
IPAddress="0.0.0.0"
Port="5055"
OverrideApplication="Master">
</UDPListener>
<UDPListener
IPAddress="0.0.0.0"
Port="5056"
OverrideApplication="Game1">
</UDPListener>
<UDPListener
IPAddress="0.0.0.0"
Port="5057"
OverrideApplication="Game2">
</UDPListener>
</UDPListeners>
「/deploy/Loadbalancing/GameServer1」と「/GameServer2」で、「GamingUdpPort」を編集します:
XML
<setting name="GamingUdpPort" serializeAs="String">
<value>5056</value>
</setting>
新しいマスターサーバーポートに接続するよう、クライアントを変更します。
Photon Serverを再起動してください。
TCPSilverlightListenersとTCPFlashListenersノード
削除可能ですが、SilverlightやFlashゲームの作成に必要です。
どちらのクライアントサイドのプラグインも、サーバーが「ポリシーファイル」でレスポンスすることを必須とします(ウェブサイトがPhotonと同一ドメイン上にある場合を除く)。
タイムアウト設定
インスタンスノードの2つの値であるMinimumTimeoutとMaximumTimeoutは、 サーバーがレスポンスのないUDPクライアントをどのようにタイムアウトするかを示します。
XML
<Instance1
EnablePerformanceCounters = "true"
DataSendingDelayMilliseconds="50"
AckSendingDelayMilliseconds="50"
MinimumTimeout="5000"
MaximumTimeout="30000">
UDPで接続されているピアは、切断されるまでにMinimumTimeoutミリ秒、応答するための時間があります。
切断されるまでの実際の時間は、ピアごとにRTTの履歴にもとづいて動的に決定されます。過去に良かったRTTはより早く切断されます。
TCP接続はノードTCPListenerとTCPPolicyListener (PhotonServer.configにも)に、個別の InactivityTimeout設定があります。
これらは5秒(5000ms)に設定されています。
この時間内にリクエストが届かない場合、接続はタイムアウトし閉じられます。
クライアントはこれを回避するために、定期的にサーバを「ping」します。 TCPの場合、クライアントはタイムアウトしません。
クライアントは独自に接続を監視し、 接続をタイムアウトする可能性もある点に留意してください。
両方の側が、ゲームに適切で、近似したタイムアウトを持つ必要があります。
送信の遅延とACKの遅延
属性DataSendingDelayMillisecondsとAckSendingDelayMillisecondsは、 パフォーマンスと最小応答時間の交換を表します。
この遅延は、トラフィックを削減するためにラグを直接加えます:
待機によってサーバーがコマンドを集約し、1つのパッケージでの送信が可能になります。
送信の遅延はサーバーが何かを送信するとトリガーされ、ACKの遅延は信頼性の高いデータの受信にトリガーされます。
上記の通り、各デフォルト値は50ミリ秒です。
これは適切な値ですが、クライアントとサーバーが同じマシン上で稼動していても50ミリ秒未満のラウンドトリップタイムが発生します。
ゲームに合わせて、異なる値での負荷テストをおこなってください。
0の遅延は、タイマーの使用を省略した特殊なケースです。 10未満の低い遅延は避けてください。