• 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创建网络线程的操作上.......

      这是我的登陆服务

  • 相关阅读:
    无线鼠标换电池了
    Jython Interactive Servlet Console YOU WILL NEVER KNOW IT EXECLLENT!!! GOOD
    Accessing Jython from Java Without Using jythonc
    jython podcast cool isnt't it?
    Python里pycurl使用记录
    Creating an Interactive JRuby Console for the Eclipse Environment
    微软为AJAX和jQuery类库提供CDN服务
    Download A File Using Cygwin and cURL
    What is JMRI?这个是做什么用的,我真没看懂但看着又很强大
    用curl 发送指定的大cookie的http/https request
  • 原文地址:https://www.cnblogs.com/laddc/p/6752476.html
Copyright © 2020-2023  润新知