zoukankan      html  css  js  c++  java
  • Photon Server LoadBalancing搭建

    准备:申请3台Windows虚拟机。

      

    3台虚拟机上都部署上Photon Server. 

    一、主虚拟机上部署MasterServer。

      (1)在第一台虚拟机中,部署的Photon Server目目录下找到Loadbalancing目录,删除GameServer文件夹

      (2)修改Master的配置文件。Photon.LoadBalancing.dll.config (在目录Master/bin/中)

      (3)修改PhotonServer.config 配置文件。(在目录 bin_Win64/ 中) 删除跟Game相关的配置

    <?xml version="1.0" encoding="Windows-1252"?>
    <!--
        (c) 2015 by Exit Games GmbH, http://www.exitgames.com
        Photon server configuration file.
        For details see the photon-config.pdf.
    
        This file contains two configurations:
            
            "LoadBalancing"
                    Loadbalanced setup for local development: A Master-server and a game-server.
                    Starts the apps: Game, Master, CounterPublisher
                    Listens: udp-port 5055, tcp-port: 4530, 843 and 943        
        
    -->
    
    <Configuration>
        <!-- Multiple instances are supported. Each instance has its own node in the config file. -->
        
        <LoadBalancing
            MaxMessageSize="512000"
            MaxQueuedDataPerPeer="512000"
            PerPeerMaxReliableDataInTransit="51200"
            PerPeerTransmitRateLimitKBSec="256"
            PerPeerTransmitRatePeriodMilliseconds="200"
            MinimumTimeout="5000"
            MaximumTimeout="30000"
            DisplayName="LoadBalancing (MyCloud)">
    
            <!-- 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>
            </UDPListeners>
            
            <!-- 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="Policyassetssocket-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>
            
            <!-- Policy request listener for Unity and Flash (port 843) and Silverlight (port 943)  -->
            <PolicyFileListeners>
              <!-- multiple Listeners allowed for different ports -->
              <PolicyFileListener
                IPAddress="0.0.0.0"
                Port="843"
                PolicyFile="Policyassetssocket-policy.xml">
              </PolicyFileListener>
              <PolicyFileListener
                IPAddress="0.0.0.0"
                Port="943"
                PolicyFile="Policyassetssocket-policy-silverlight.xml">
              </PolicyFileListener>
            </PolicyFileListeners>
            
            <!-- WebSocket (and Flash-Fallback) compatible listener -->
            <WebSocketListeners>
                <WebSocketListener
                    IPAddress="0.0.0.0"
                    Port="9090"
                    DisableNagle="true"
                    InactivityTimeout="10000"
                    OverrideApplication="Master">
                </WebSocketListener>
                
            </WebSocketListeners>
    
            <!-- Defines the Photon Runtime Assembly to use. -->
            <Runtime
                Assembly="PhotonHostRuntime, Culture=neutral"
                Type="PhotonHostRuntime.PhotonDomainManager"
                UnhandledExceptionPolicy="Ignore">
            </Runtime>
    
            <!-- 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="LoadBalancingMaster"
                    Assembly="Photon.LoadBalancing"
                    Type="Photon.LoadBalancing.MasterServer.MasterApplication"
                    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>
        
    </Configuration>
    View Code

     

       (4)启动服务。

    二、在另外两台虚拟机上部署GameServer服务

      (1)在目前中删除Master

      (2)修改GameServer/bin/Photon.LoadBalancing.dll.config 配置文件。

    先删除MasterServer配置项

      

    修改GameServerSetting项中的  MasterIPAddress 一项。

       总体配置

    <?xml version="1.0"?>
    
    <configuration>
      <configSections>
        <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
          <section name="Photon.LoadBalancing.Common.CommonSettings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
                  requirePermission="false" />
          <section name="Photon.LoadBalancing.GameServer.GameServerSettings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
                   requirePermission="false" />
          <section name="Photon.LoadBalancing.MasterServer.MasterServerSettings"
                   type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
                   requirePermission="false" />
          <section name="Photon.Common.Authentication.Settings"
               type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
               requirePermission="false" />
        </sectionGroup>
        <section name="Photon" type="Photon.SocketServer.Diagnostics.Configuration.PhotonSettings, Photon.SocketServer" />
        <section name="PluginSettings" type="Photon.Hive.Configuration.PluginSettings, PhotonHive" />
        <section name="WebRpcSettings" type="Photon.Hive.WebRpc.Configuration.WebRpcSettings, PhotonHive" />
        <section name="AuthSettings" type="Photon.Common.Authentication.Configuration.Auth.AuthSettings, Photon.Common" />
      </configSections>
      <applicationSettings>
    
        <Photon.LoadBalancing.Common.CommonSettings>
          <setting name="NodesFileName" serializeAs="String">
            <value>Nodes.txt</value>
          </setting>
          <setting name="NodesFilePath" serializeAs="String">
            <value>....</value>
          </setting>
          <setting name="EnablePerformanceCounters" serializeAs="String">
            <value>True</value>
          </setting>
        </Photon.LoadBalancing.Common.CommonSettings>
    
        <Photon.Common.Authentication.Settings>
          <setting name="AuthCacheUpdateInterval" serializeAs="String">
            <value>300</value>
          </setting>
    
          <setting name="AuthTokenKey" serializeAs="String">
            <value>76B2814E-2A50-4E29-838A-20411D335FC9</value>
          </setting>
    
          <setting name="AuthTokenExpiration" serializeAs="String">
            <value>10000</value>
          </setting>
    
          <!-- Custom Authentication Queue Settings -->
          <setting name="MaxConcurrentRequests" serializeAs="String">
            <value>50</value>
          </setting>
          <setting name="MaxQueuedRequests" serializeAs="String">
            <value>5000</value>
          </setting>
          <setting name="MaxErrorRequests" serializeAs="String">
            <value>10</value>
          </setting>
          <setting name="MaxTimedOutRequests" serializeAs="String">
            <value>10</value>
          </setting>
          <setting name="HttpRequestTimeoutMS" serializeAs="String">
            <value>30000</value>
          </setting>
          <setting name="ReconnectIntervalS" serializeAs="String">
            <value>60</value>
          </setting>
          <setting name="QueueTimeoutS" serializeAs="String">
            <value>20</value>
          </setting>
          <setting name="MaxBackoffTimeInMiliseconds" serializeAs="String">
            <value>10000</value>
          </setting>
        </Photon.Common.Authentication.Settings>
    
        <Photon.LoadBalancing.GameServer.GameServerSettings>
          <setting name="AppStatsPublishInterval" serializeAs="String">
            <value>1000</value>
          </setting>
          <!-- GameServer-to-Master connections. -->
          <setting name="ConnectReytryInterval" serializeAs="String">
            <value>15</value>
          </setting>
          <setting name="EnableNamedPipe" serializeAs="String">
            <value>False</value>
          </setting>
          <!-- Path for Client-to-Gameserver HTTP connections -->
          <setting name="GamingHttpPath" serializeAs="String">
            <value>photon/g</value>
          </setting>
          <!-- Client-to-Gameserver HTTP connections. Needs to match the RHTTPListener in PhotonServer.config -->
          <setting name="GamingHttpPort" serializeAs="String">
            <value>80</value>
          </setting>
          <!-- Client-to-Gameserver HTTPS connections. Needs to match the RHTTPListener in PhotonServer.config -->
          <setting name="GamingHttpsPort" serializeAs="String">
            <value>443</value>
          </setting>
          <!-- Client-to-Gameserver Secure WebSocket connections. Needs to match the secure WebSocketListener in PhotonServer.config -->
          <setting name="GamingSecureWebSocketPort" serializeAs="String">
            <value>19091</value>
          </setting>
          <!-- Client-to-Gameserver TCP connections. Needs to match the TCPListener in PhotonServer.config -->
          <setting name="GamingTcpPort" serializeAs="String">
            <value>4531</value>
          </setting>
          <!-- Client-to-Gameserver UDP connections. Needs to match the UDPListener in PhotonServer.config -->
          <setting name="GamingUdpPort" serializeAs="String">
            <value>5056</value>
          </setting>
          <!-- Client-to-Gameserver WebSocket connections. Needs to match the WebSocketListener in PhotonServer.config -->
          <setting name="GamingWebSocketPort" serializeAs="String">
            <value>9091</value>
          </setting>
          <setting name="HttpQueueMaxErrors" serializeAs="String">
            <value>30</value>
          </setting>
          <setting name="HttpQueueMaxTimeouts" serializeAs="String">
            <value>30</value>
          </setting>
            <setting name="HttpQueueRequestTimeout" serializeAs="String">
                <value>30000</value>
            </setting>
            <setting name="HttpQueueMaxBackoffTime" serializeAs="String">
                <value>10000</value>
            </setting>
            <setting name="HttpQueueMaxQueuedRequests" serializeAs="String">
                <value>5000</value>
            </setting>
            <setting name="HttpQueueQueueTimeout" serializeAs="String">
                <value>90000</value>
            </setting>
            <setting name="HttpQueueReconnectInterval" serializeAs="String">
                <value>60000</value>
            </setting>
            <setting name="HttpQueueMaxConcurrentRequests" serializeAs="String">
                <value>1</value>
            </setting>
            <setting name="LastTouchCheckIntervalSeconds" serializeAs="String">
            <value>60</value>
          </setting>
          <setting name="LastTouchSecondsDisconnect" serializeAs="String">
            <value>0</value>
          </setting>
          <!-- Set to the IP Address of the Photon instance where your Master application is running. -->
          <setting name="MasterIPAddress" serializeAs="String">
            <value>15.24.15.114</value>
          </setting>
          <setting name="MaxEmptyRoomTTL" serializeAs="String">
            <value>60000</value>
          </setting>
          <!-- Gameserver-to-Master connections. -->
          <setting name="OutgoingMasterServerPeerPort" serializeAs="String">
            <value>4520</value>
          </setting>
          <setting name="PublicIPAddress" serializeAs="String">
            <value></value>
          </setting>
          <setting name="PublicIPAddressIPv6" serializeAs="String">
            <value></value>
          </setting>
          <!-- the hostname for this gameserver. Required for HTTP & websocket connections. Change it to a useful entry, like hostname.mydomain.com, for a production scenario. -->
          <setting name="PublicHostName" serializeAs="String">
            <!--<value>%COMPUTERNAME%.mydomain.com</value>-->
            <value>localhost</value>
          </setting>
          
          <!-- The domain name for this gameserver. Required for websocket connections and needs to match the certificate for secure websocket / https connections. 
               For example:  mydomain.com -->
          <setting name="PublicDomainName" serializeAs="String">
            <value />
          </setting>
          <setting name="RelayPortHttp" serializeAs="String">
            <value>0</value>
          </setting>
          <setting name="RelayPortSecureWebSocket" serializeAs="String">
            <value>0</value>
          </setting>
          <setting name="RelayPortTcp" serializeAs="String">
            <value>0</value>
          </setting>
          <setting name="RelayPortUdp" serializeAs="String">
            <value>0</value>
          </setting>
          <setting name="RelayPortWebSocket" serializeAs="String">
            <value>0</value>
          </setting>
          <setting name="ServerStateFile" serializeAs="String">
            <value>ServerState.txt</value>
          </setting>
          <setting name="WorkloadConfigFile" serializeAs="String">
            <value>Workload.config</value>
          </setting>
        </Photon.LoadBalancing.GameServer.GameServerSettings>
      </applicationSettings>
    
      <Photon>
        <CounterPublisher enabled="True" updateInterval="1">
          <Sender
            endpoint="udp://255.255.255.255:40001"
            protocol="PhotonBinary"
            initialDelay="10"
            sendInterval="10" />
        </CounterPublisher>
      </Photon>
      <!-- Enable webhooks plugin by setting Enabled to "true" -->
      <PluginSettings Enabled="false">
        <Plugins>
          <Plugin
                  Name="WebHooksPlugin1.2"
                  Version=""
                  AssemblyName="PhotonHive.WebhooksPlugin1.2.dll"
                  Type="Photon.Hive.Plugin.WebHooks.PluginFactory"
                  BaseUrl="http://photon-photon-pluginsdk-v1.webscript.io"
                  IsPersistent="true"
                  HasErrorInfo="true"
                  PathClose="GameClose"
                  PathCreate="GameCreate"
                  PathEvent="GameEvent"
                  PathGameProperties="GameProperties"
                  PathJoin="GameJoin"
                  PathLeave="GameLeave"
                  PathLoad="GameCreate" />
        </Plugins>
      </PluginSettings>
      <!-- Enable webRPCs by setting Enabled to "true" -->
      <WebRpcSettings Enabled="false">
        <BaseUrl Value="http://photon-photon-pluginsdk-v1.webscript.io" />
      </WebRpcSettings>
    
      <!-- Enable Custom Authentication by setting Enabled to "true" -->
      <AuthSettings Enabled="false" ClientAuthenticationAllowAnonymous="true">
        <AuthProviders>
          <AuthProvider Name="Custom"
                        AuthenticationType="0"
                        AuthUrl="http://photon.webscript.io/auth-demo"
                        secret="customauthsecret" />
          
          <AuthProvider Name="Facebook"
                        AuthenticationType="2"
                        AuthUrl=""
                        secret="Val1"
                        appid="Val2" />
        </AuthProviders>
      </AuthSettings>
    
      <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0" />
      </startup>
    </configuration>
    View Code

      (3)修改服务器启动配置  /deploy/bin_Win64/PhotonServer.config 。删除跟Master修改配置

    <?xml version="1.0" encoding="Windows-1252"?>
    <!--
        (c) 2015 by Exit Games GmbH, http://www.exitgames.com
        Photon server configuration file.
        For details see the photon-config.pdf.
    
        This file contains two configurations:
            
            "LoadBalancing"
                    Loadbalanced setup for local development: A Master-server and a game-server.
                    Starts the apps: Game, Master, CounterPublisher
                    Listens: udp-port 5055, tcp-port: 4530, 843 and 943        
        
    -->
    
    <Configuration>
        <!-- Multiple instances are supported. Each instance has its own node in the config file. -->
        
        <LoadBalancing
            MaxMessageSize="512000"
            MaxQueuedDataPerPeer="512000"
            PerPeerMaxReliableDataInTransit="51200"
            PerPeerTransmitRateLimitKBSec="256"
            PerPeerTransmitRatePeriodMilliseconds="200"
            MinimumTimeout="5000"
            MaximumTimeout="30000"
            DisplayName="GameLoab (MyCloud)">
    
            <!-- 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="5056"
                    OverrideApplication="Game">
                </UDPListener>
                
            </UDPListeners>
            
            <!-- 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="4531"
                    OverrideApplication="Game"
                    PolicyFile="Policyassetssocket-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>
            
            <!-- Policy request listener for Unity and Flash (port 843) and Silverlight (port 943)  -->
            <PolicyFileListeners>
              <!-- multiple Listeners allowed for different ports -->
              <PolicyFileListener
                IPAddress="0.0.0.0"
                Port="843"
                PolicyFile="Policyassetssocket-policy.xml">
              </PolicyFileListener>
              <PolicyFileListener
                IPAddress="0.0.0.0"
                Port="943"
                PolicyFile="Policyassetssocket-policy-silverlight.xml">
              </PolicyFileListener>
            </PolicyFileListeners>
    
            
            <!-- WebSocket (and Flash-Fallback) compatible listener -->
            <WebSocketListeners>
                <WebSocketListener
                    IPAddress="0.0.0.0"
                    Port="9091"
                    DisableNagle="true"
                    InactivityTimeout="10000"
                    OverrideApplication="Game">
                </WebSocketListener>
                
            </WebSocketListeners>
    
            <!-- Defines the Photon Runtime Assembly to use. -->
            <Runtime
                Assembly="PhotonHostRuntime, Culture=neutral"
                Type="PhotonHostRuntime.PhotonDomainManager"
                UnhandledExceptionPolicy="Ignore">
            </Runtime>
    
            <!-- 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="Game">        
    
                <Application
                    Name="Game"
                    BaseDirectory="LoadBalancingGameServer"
                    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>    
        
    </Configuration>
    View Code

        (4) 启动服务

      三、第3台虚拟机跟第二台虚拟机配置一样

          四、测试。在第一天MasterServer虚拟机中直接用服务器自带的测试工具。

    测试发现MasterServer服务器已经能够连上另外两个GameServer服务器了。(这里conneting ip 就是另外两台GameServer服务器的Ip地址).

    查看文档: https://doc.photonengine.com/en-us/server/current/applications/loadbalancing/application

          https://gitchat.csdn.net/columnTopic/5a39d5a575e5a577886d6c20

  • 相关阅读:
    JVM-压缩指针
    JVM-Java GC分析
    MySQL 技巧
    Tomcat启动web项目报Bad version number in .class file (unable to load class ...)错误的解决方法
    关于web.xml中的<welcome-file-list>中的默认首页资料
    JS传递中文参数出现乱码的解决办法
    jquery实现奇偶行赋值不同css值
    MyBatis传入多个参数的问题
    从MYSQL数据库查出指定格式的日期
    jquery 操作实例一
  • 原文地址:https://www.cnblogs.com/cj8988/p/11731428.html
Copyright © 2011-2022 走看看