首页 > 代码库 > Photon Server伺服务器在LoadBalancing的基础上扩展登陆服务

Photon Server伺服务器在LoadBalancing的基础上扩展登陆服务

一,如何创建一个Photon Server服务

  参见此博客 快速了解和使用Photon Server

二, 让LoadBalancing与自己的服务一起启动

  原Photonserver.config文件中需要改动的地方有4处

  1.  <UDPListeners> 标签

    Udp监听端口

      <UDPListeners>
			<UDPListener
				IPAddress="0.0.0.0"
				Port="5055"
				OverrideApplication="Master">
			</UDPListener>
			<UDPListener
				IPAddress="0.0.0.0"
				Port="5056"
				OverrideApplication="Game">
			</UDPListener>
			<UDPListener
				IPAddress="0.0.0.0"
				Port="5057"
				OverrideApplication="LoginServer">
			</UDPListener>
		</UDPListeners>

  这里配置我自己的服务 LoginServer 监听端口为5057 所以Unity中链接服务器的端口也要改动

    address = "127.0.0.1:5057"; //连接本机ip,端口5055是Photon Lobalancing服务的默认端口

    Server = "LoginServer";
    peer = new PhotonPeer(this, ConnectionProtocol.Udp); //默认使用udp协议
    peer.Connect(address, Server);  

  2.  <TCPListeners> 标签

    TCP监控端口

    同样的添加配置    

			<TCPListener
				IPAddress="0.0.0.0"
				Port="4532"
				OverrideApplication="LoginServer"
				PolicyFile="Policy\assets\socket-policy.xml"
				InactivityTimeout="10000">
			</TCPListener>

     3.  <WebSocketListeners>

    WebSocket兼容监听    

			<WebSocketListener
				IPAddress="0.0.0.0"
				Port="9092"
				DisableNagle="true"
				InactivityTimeout="10000"
				OverrideApplication="LoginServer">
			</WebSocketListener>

   4.  <Applications>标签

  保留Master Game 等原来的标签

		<Applications Default="Master">
			<Application
				Name="LoginServer" 
				BaseDirectory="LoginServer"
				Assembly="LoginServer"
				Type="LoginServer.LoginServer"
				ForceAutoRestart="true"
				WatchFiles="dll;config"
				ExcludeFiles="log4net.config"
			>
			</Application>
			.
              .
              .
</Applications>

  完整的Photonserver.config文件  

技术分享
<?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>
            <UDPListener
                IPAddress="0.0.0.0"
                Port="5056"
                OverrideApplication="Game">
            </UDPListener>
            <UDPListener
                IPAddress="0.0.0.0"
                Port="5057"
                OverrideApplication="LoginServer">
            </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="Policy\assets\socket-policy.xml"
                InactivityTimeout="10000"
                >
            </TCPListener>
            
            <TCPListener
                IPAddress="0.0.0.0"
                Port="4531"
                OverrideApplication="Game"
                PolicyFile="Policy\assets\socket-policy.xml"
                InactivityTimeout="10000">
            </TCPListener>
            <TCPListener
                IPAddress="0.0.0.0"
                Port="4532"
                OverrideApplication="LoginServer"
                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>
        
        <!-- 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="Policy\assets\socket-policy.xml">
          </PolicyFileListener>
          <PolicyFileListener
            IPAddress="0.0.0.0"
            Port="943"
            PolicyFile="Policy\assets\socket-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>
            
            <WebSocketListener
                IPAddress="0.0.0.0"
                Port="9091"
                DisableNagle="true"
                InactivityTimeout="10000"
                OverrideApplication="Game">
            </WebSocketListener>
            <WebSocketListener
                IPAddress="0.0.0.0"
                Port="9092"
                DisableNagle="true"
                InactivityTimeout="10000"
                OverrideApplication="LoginServer">
            </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="LoginServer" 
                BaseDirectory="LoginServer"
                Assembly="LoginServer"
                Type="LoginServer.LoginServer"
                ForceAutoRestart="true"
                WatchFiles="dll;config"
                ExcludeFiles="log4net.config"
            >
            </Application>
            <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>    
    
    <!-- Instance settings -->
    <MMoDemo
        MaxMessageSize="512000"
        MaxQueuedDataPerPeer="512000"
        PerPeerMaxReliableDataInTransit="51200"
        PerPeerTransmitRateLimitKBSec="256"
        PerPeerTransmitRatePeriodMilliseconds="200"
        MinimumTimeout="5000"
        MaximumTimeout="30000"
        DisplayName="MMO Demo"
        >
        
        <!-- 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="MMoDemo">
            </UDPListener>
        </UDPListeners>
    
        <!-- 0.0.0.0 opens listeners on all available IPs. Machines with multiple IPs should define the correct one here. -->
        <!-- Port 4530 is Photon‘s default for TCP connecttions. -->
        <!-- A Policy application is defined in case that policy requests are sent to this listener (known bug of some some flash clients) --> 
        <TCPListeners>
            <TCPListener
                IPAddress="0.0.0.0"
                Port="4530"
                PolicyFile="Policy\assets\socket-policy.xml"
                InactivityTimeout="10000"
                OverrideApplication="MMoDemo"                
                >
            </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="Policy\assets\socket-policy.xml"
            InactivityTimeout="10000">
          </PolicyFileListener>
          <PolicyFileListener
            IPAddress="0.0.0.0"
            Port="943"
            PolicyFile="Policy\assets\socket-policy-silverlight.xml"
            InactivityTimeout="10000">
          </PolicyFileListener>
        </PolicyFileListeners>

        <!-- WebSocket (and Flash-Fallback) compatible listener -->
        <WebSocketListeners>
            <WebSocketListener
                IPAddress="0.0.0.0"
                Port="9090"
                DisableNagle="true"
                InactivityTimeout="10000"
                OverrideApplication="MMoDemo">
            </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="MMoDemo">
        
            <!-- MMO Demo Application -->
            <Application
                Name="MMoDemo"
                BaseDirectory="MmoDemo"
                Assembly="Photon.MmoDemo.Server"
                Type="Photon.MmoDemo.Server.PhotonApplication"
                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>
    </MMoDemo>
    
</Configuration>
View Code

 

  unity 中使用 PhotonPeer 的时候要注意在销毁场景的时候关闭链接 peer.Disconnect();

 否则unity会在第二次运行的时候出现卡死的状态.

 PhotonPeer连接服务器的时候会创建一个网络线程,停止调试并不会自动的将这个线程结束,再次调试的时候Unity就会卡在PhotonPeer创建网络线程的操作上.......

 

  这是我的登陆服务

Photon Server伺服务器在LoadBalancing的基础上扩展登陆服务