一,如何创建一个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>
unity 中使用 PhotonPeer 的时候要注意在销毁场景的时候关闭链接 peer.Disconnect();
否则unity会在第二次运行的时候出现卡死的状态.
PhotonPeer连接服务器的时候会创建一个网络线程,停止调试并不会自动的将这个线程结束,再次调试的时候Unity就会卡在PhotonPeer创建网络线程的操作上.......