• 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="Policyassetssocket-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="Policyassetssocket-policy.xml"
                    InactivityTimeout="10000"
                    >
                </TCPListener>
                
                <TCPListener
                    IPAddress="0.0.0.0"
                    Port="4531"
                    OverrideApplication="Game"
                    PolicyFile="Policyassetssocket-policy.xml"
                    InactivityTimeout="10000">
                </TCPListener>
                <TCPListener
                    IPAddress="0.0.0.0"
                    Port="4532"
                    OverrideApplication="LoginServer"
                    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>
                
                <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="LoadBalancingMaster"
                    Assembly="Photon.LoadBalancing"
                    Type="Photon.LoadBalancing.MasterServer.MasterApplication"
                    ForceAutoRestart="true"
                    WatchFiles="dll;config"
                    ExcludeFiles="log4net.config"
                    >
                </Application>
                <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>    
        
        <!-- 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="Policyassetssocket-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="Policyassetssocket-policy.xml"
                InactivityTimeout="10000">
              </PolicyFileListener>
              <PolicyFileListener
                IPAddress="0.0.0.0"
                Port="943"
                PolicyFile="Policyassetssocket-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创建网络线程的操作上.......

      这是我的登陆服务

  • 相关阅读:
    【原创】cs+html+js+css模式(一):初识新模式
    【原创】cs+html+js+css模式(三):RemoteCallHandler详解
    删除表数据
    【原创】cs+html+js+css模式(二):webconfig中的设置
    silverlight动画
    rdlc报表表达式应用(字符串和转换)
    Accordion控件制作下拉面板菜单(静态数据)
    silverlight三种布局
    Sys.UI.DomElement
    Accordion控件动态数据绑定案例
  • 原文地址:https://www.cnblogs.com/laddc/p/6752476.html
Copyright © 2020-2023  润新知