複数台構成でのPhoton Serverのインストール

photon_server_pink

Photon運営事務局です。
たまにはサーバーサイドもということで、Photon Serverのお話もしていきたいと思います。

まずは基本的なインストールですが、実用的に使う場合は複数台構成になるかと思います。ですので、複数台構成で使う場合のインストール方法について、簡単にご説明していきたいと思います。

基本的なインストール方法はドキュメントの5分でPhotonをはじめましょうをご覧ください。
http://doc.exitgames.com/ja/onpremise/current/getting-started/photon-server-in-5min
また、Photon Serverの起動などについては、Photonコントロールをご確認ください。
http://doc.exitgames.com/ja/onpremise/current/reference/photon-control-application

Photon Serverのアプリ構成

Photon Serverのベースアプリケーションとしては、下記の二つがあります。

  • Lite
  • LoadBalancing

Liteは1台構成でのベース、そしてLoadBalancingは複数台構成のベースとなります。
Photon RealtimeはLoadBalacingをベースに作られていますし、Photon Unity Networking(PUN)を利用する場合はLoadBalancingが必須となります。
ですので、実用上はLoadBalancingを利用する場合がほとんどになるでしょう。

ここでは、そのLoadBalancingで、Master Server * 1台、Game Server * 2台の構成でインストールを進めていくこととします。

LoadBalacingの内部構成

LoadBalancingの中に、さらに3つのアプリケーションが存在しています。

  • Master
  • Game1
  • Game2

MasterはMaster Serverの部分で、いわゆるロビーの部分と振り分け機能を持っています。
Game1/Game2はGame Serverの部分で、ルームに入室後のゲーム部分を受け持っています。ちなみにGame1とGame2は実装としては全く同一です。

Master ServerとGame Serverの詳細については、下記をご覧ください。
http://doc.exitgames.com/ja/onpremise/current/reference/load-balancing

ここでは、Master Serverがロビー、Game Serverがルームの部分を担当するんだな、ということだけ理解できればOKです!

Master Serverの構築

能書きはこのくらいにして、実際の設定に入っていきましょう。
まずは、Master Serverの構築を進めていきます。

PhotonServer.configの編集

Photon Server全体の設定を行うPhotonServer.configを編集していきます。
ファイルの場所は下記の通りです。
(server-sdk)¥deploy¥bin_Win{32|64}¥PhotonServer.config

基本的な方針としては、LoadBalancingアプリ(インスタンス)内のGame1/Game2アプリに関する部分を除く、という形になります。

最初に出てくるのがUDPListers。UDP送受信に関する部分です。この中のGame1/2に関する部分を削除かコメントアウトします。159-168行目になります。

    <!-- 0.0.0.0 opens listeners on all available IPs. Machines with multiple IPs should define the correct one here. -->
    <!-- Port 5055 is Photon's default for UDP connections. -->
    <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>

次はTCPListeners。TCP送受信に関する部分です。ここも同様にGame1/2に関する部分を削除(またはコメントアウト。以下同様)。183-197行目になります。

    <!-- 0.0.0.0 opens listeners on all available IPs. Machines with multiple IPs should define the correct one here. -->   
    <TCPListeners>
      <!-- TCP listener for Game clients on Master application -->
      <TCPListener
        IPAddress="0.0.0.0"
        Port="4530"
        OverrideApplication="Master"
        PolicyFile="Policy\assets\socket-policy.xml"
        InactivityTimeout="10000"
        >
      </TCPListener>
      
      <TCPListener
        IPAddress="0.0.0.0"
        Port="4531"
        OverrideApplication="Game1"
        PolicyFile="Policy\assets\socket-policy.xml"
        InactivityTimeout="10000">
      </TCPListener>

      <TCPListener
        IPAddress="0.0.0.0"
        Port="4532"
        OverrideApplication="Game2"
        PolicyFile="Policy\assets\socket-policy.xml"
        InactivityTimeout="10000">
      </TCPListener>
      
      <!-- DON'T EDIT THIS. TCP listener for GameServers on Master application -->
      <TCPListener
        IPAddress="0.0.0.0"
        Port="4520">
      </TCPListener>
    </TCPListeners>

続いてはWebSocketListeners。WebSocket通信に関する部分です。ここも同様に削除します。232-246行目です。

    <!-- WebSocket (and Flash-Fallback) compatible listener -->
    <WebSocketListeners>
      <WebSocketListener
        IPAddress="0.0.0.0"
        Port="9090"
        DisableNagle="true"
        InactivityTimeout="10000"
        OverrideApplication="Master">
      </WebSocketListener>
      
      <WebSocketListener
        IPAddress="0.0.0.0"
        Port="9091"
        DisableNagle="true"
        InactivityTimeout="10000"
        OverrideApplication="Game1">
      </WebSocketListener>
      
      <WebSocketListener
        IPAddress="0.0.0.0"
        Port="9092"
        DisableNagle="true"
        InactivityTimeout="10000"
        OverrideApplication="Game2">
      </WebSocketListener>
    </WebSocketListeners>

最後はApplicationの定義部分。Game1/Game2の定義を削除します。269-286行目です。

    <!-- Defines which applications are loaded on start and which of them is used by default. Make sure the default application is defined. -->
    <!-- Application-folders must be located in the same folder as the bin_win32 folders. The BaseDirectory must include a "bin" folder. -->
    <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="Game1"
        BaseDirectory="LoadBalancing\GameServer1"
        Assembly="Photon.LoadBalancing"
        Type="Photon.LoadBalancing.GameServer.GameApplication"
        ForceAutoRestart="true"
        WatchFiles="dll;config"
        ExcludeFiles="log4net.config">
      </Application>
      <Application
        Name="Game2"
        BaseDirectory="LoadBalancing\GameServer2"
        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>

お疲れ様でした。Master Serverの設定ファイルの変更は以上になります。

Photon Serverの起動

変更が終わったら、まずMaster Serverを起動してみて、正常に起動するか確認してみてください。
正常に起動しない場合は、
(server-sdk)¥deploy¥bin_Win{32|64}¥log
フォルダにログファイルが生成されるので、ログのエラー内容を確認してみてください。

Game Serverの構築

Master Serverの構築が終わったので、続いてGame Serverの構築に進みましょう。
ここでは、すべてのGame ServerでGame1アプリを使うこととします。2つなので、Game1/Game2それぞれを使ってもいいのですが、さらに増やす場合に面倒なので、同じ物としました。

PhotonServer.configの編集

まず最初はMaster Serverと同じくPhotonServer.configから編集していきましょう。
(server-sdk)¥deploy¥bin_Win{32|64}¥PhotonServer.config

基本方針はMaster Serverと一緒ですが、残すのがGame1となります。

最初はUDPListers。この中のMaster/Game2に関する部分を削除。154-158,164-168行目になります。

    <!-- 0.0.0.0 opens listeners on all available IPs. Machines with multiple IPs should define the correct one here. -->
    <!-- Port 5055 is Photon's default for UDP connections. -->
    <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>

次はTCPListeners。TCP送受信に関する部分です。ここも同様にMaster/Game2に関する部分を削除します。174-181,191-197行目になります。

    <!-- 0.0.0.0 opens listeners on all available IPs. Machines with multiple IPs should define the correct one here. -->   
    <TCPListeners>
      <!-- TCP listener for Game clients on Master application -->
      <TCPListener
        IPAddress="0.0.0.0"
        Port="4530"
        OverrideApplication="Master"
        PolicyFile="Policy\assets\socket-policy.xml"
        InactivityTimeout="10000"
        >
      </TCPListener>
      
      <TCPListener
        IPAddress="0.0.0.0"
        Port="4531"
        OverrideApplication="Game1"
        PolicyFile="Policy\assets\socket-policy.xml"
        InactivityTimeout="10000">
      </TCPListener>

      <TCPListener
        IPAddress="0.0.0.0"
        Port="4532"
        OverrideApplication="Game2"
        PolicyFile="Policy\assets\socket-policy.xml"
        InactivityTimeout="10000">
      </TCPListener>
      
      <!-- DON'T EDIT THIS. TCP listener for GameServers on Master application -->
      <TCPListener
        IPAddress="0.0.0.0"
        Port="4520">
      </TCPListener>
    </TCPListeners>

続いてはWebSocketListeners。WebSocket通信に関する部分です。ここも同様に削除します。224-230,240-246行目です。

    <!-- WebSocket (and Flash-Fallback) compatible listener -->
    <WebSocketListeners>
      <WebSocketListener
        IPAddress="0.0.0.0"
        Port="9090"
        DisableNagle="true"
        InactivityTimeout="10000"
        OverrideApplication="Master">
      </WebSocketListener>
      
      <WebSocketListener
        IPAddress="0.0.0.0"
        Port="9091"
        DisableNagle="true"
        InactivityTimeout="10000"
        OverrideApplication="Game1">
      </WebSocketListener>
      
      <WebSocketListener
        IPAddress="0.0.0.0"
        Port="9092"
        DisableNagle="true"
        InactivityTimeout="10000"
        OverrideApplication="Game2">
      </WebSocketListener>
    </WebSocketListeners>

最後はApplicationの定義部分。Master/Game2の定義を削除するとともに、ApplicationのDefaultがmasterになっているのをGame1に変更する必要があります。Defaultの変更は258行目、削除するのは259-268,278-286行目です。

    <!-- Defines which applications are loaded on start and which of them is used by default. Make sure the default application is defined. -->
    <!-- Application-folders must be located in the same folder as the bin_win32 folders. The BaseDirectory must include a "bin" folder. -->
    <Applications Default="Game1">    
      <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="Game1"
        BaseDirectory="LoadBalancing\GameServer1"
        Assembly="Photon.LoadBalancing"
        Type="Photon.LoadBalancing.GameServer.GameApplication"
        ForceAutoRestart="true"
        WatchFiles="dll;config"
        ExcludeFiles="log4net.config">
      </Application>
      <Application
        Name="Game2"
        BaseDirectory="LoadBalancing\GameServer2"
        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>

PhotonServer.configの編集は以上となります。

Photon.LoadBalancing.dll.configの編集

続いてはアプリケーション固有の設定を変更していきます。
設定ファイルは下記の通りです。
(server-sdk)¥deploy¥Loadbalancing¥GameServer1¥bin¥Photon.LoadBalancing.dll.config

最初はMaster Serverの指定です。Master ServerのIPアドレスを記載してください。変更するのは13行目です。

      <!-- Set to the IP Address of the Photon instance where your Master application is running. -->
            <setting name="MasterIPAddress" serializeAs="String">
                <value>192.168.1.1</value>
            </setting>

もう一つはGame ServerとしてアナウンスするIPアドレスの指定。Game Serverが直接グローバルIPアドレスを持っている場合は、直接記載してもいいですし、空にしておいて自動判定にしておいてもかまいません。ここでは自動判定とします。変更するのは18行目です。

      <!-- Leave empty and the the IP address will be looked up dynamically at runtime. --> 
      <setting name="PublicIPAddress" serializeAs="String">
        <value></value>
      </setting>

以上でGame Serverの設定ファイルの変更は以上となります。お疲れ様でした。

Photon Serverの起動

変更が終わったら、Game Serverを起動してみて、正常に起動するか確認してみてください。
正常に起動しない場合は、Master Serverと同じ
(server-sdk)¥deploy¥bin_Win{32|64}¥log
フォルダにログファイルが生成されるので、ログのエラー内容を確認してみてください。

Game ServerがMaster Serverへの登録が完了すると、Master Serverのログに出力されます。
そちらも確認してみてください。

とりあえず動きましたが…

以上で複数台構成で使う場合の設定となります。量は多いですが、やることはさほど複雑でないと思います。
今回は、複数台構成とはいえ、シンプルな環境でのインストールでした。次回はNAPT環境下における設定例などをご紹介していきたいと思います。

Photon Serverは簡単に使えますが、奥も深いソフトウェアです。いろいろご紹介していきたいと思っております。こんなことが知りたい!とかリクエストありましたら、ぜひお知らせください。