Photon Server游戏服务器教程(一)服务器配置
发表于2018-05-02
Photon Server 是一款实时的Socket服务器和开发框架,开发非常快速,使用非常简单。服务端架构在windows系统平台上,采用C#语言编写。Photon Server客户端SDK提供了多种平台的开发API,包括DotNet、Unity3D、C/C++以及ObjC等。这个Photon Server游戏服务器教程系列主要时帮助大家去理解和使用,下面就来看看Photon Server的配置。
一、PhotonServer的下载与解压:
1.PhotonServe的官方网站https://www.photonengine.com/zh-CN/Photon ,进入到官网后点击SDKs,选择Server 工程,点击SeverSDK ON-PREMISES进行下载,需要注册一个账号。
2.百度云盘,链接::https://pan.baidu.com/s/1nvyyC21 密码:brn6
3.把下载的文件解压到指定的盘符即可(文件路径最好不要含有中文),无需安装,我这里解压在D:\Program Files (x86)文件目录下。
解压后得到5个文件夹 build:编译配置有关的文件。 deploy :主要存放photon的服务器控制程序和服务端Demo。 doc:存放PhotonServer开发的相关API文档。 lib:存放PhotonServer开发的相关动态链接库。 src-server:服务端Demo源代码
根据自己的电脑系统选择deploy文件夹下的bin_Win32或者bin_Win64文件下的PhotonControl.exe,点击运行Photon。
运行后会出现在右下角的托盘里
此时的Licenses 最大连接数量为20,如若想扩展到100,需在官网下载授权文件,放在deploy文件夹下的bin_Win32或者bin_Win64目录里面,下次运行时会自动识别授权文件。
选择 Your Server 选项
点击Download下载100 CCU文件即可。
二、搭建自己的服务器
1.下面我们开始搭建自己的第一个Photon Sever 服务器端程序,在Visual Studio 2013中新建一个MyGamePhotonServer类库工程。
2.在工程中添加一下三个引用,文件在PhotonServer解压目录的lib文件夹中,三个dll分别是:ExitGamesLibs.dll,Photon.SocketServer.dll,PhotonHostRuntimeInterfaces.dll
3.在此工程目录中添加入口类MyGameServer,继承ApplicationBase类,并实现其接口
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Photon.SocketServer; namespace MyGamePhotonServer { /// <summary> /// 所有的server端 主类都要继承自ApplicationBase /// </summary> public class MyGameServer:ApplicationBase { /// <summary> /// 刚一个客户端请求连接的 /// </summary> /// <param name="initRequest"></param> /// <returns></returns> protected override PeerBase CreatePeer(InitRequest initRequest) { return new MyClientPeer(initRequest); } /// <summary> /// 初始化 /// </summary> protected override void Setup() { } /// <summary> /// server端关闭的时候 /// </summary> protected override void TearDown() { } } }
4.添加与客户端通信的类MyClientPeer, 需要继承ClientPeer类,并实现接口
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Photon.SocketServer; namespace MyGamePhotonServer { public class MyClientPeer:ClientPeer { public MyClientPeer(InitRequest initRequest):base(initRequest) { } /// <summary> /// 处理客户端断开连接后的操作 /// </summary> /// <param name="reasonCode"></param> /// <param name="reasonDetail"></param> protected override void OnDisconnect(PhotonHostRuntimeInterfaces.DisconnectReason reasonCode, string reasonDetail) { } /// <summary> /// 处理客户端的请求 /// </summary> /// <param name="operationRequest"></param> /// <param name="sendParameters"></param> protected override void OnOperationRequest(OperationRequest operationRequest, SendParameters sendParameters) { } } }
5.在deploy文件夹下新建一个MyGameServer\bin文件夹,在Visual Studio 2013中把我们刚创建的服务器程序MyPhotonServer部署在PhotonServer 中。
6.配置服务器:打开bin_Win64(如果你是32的就打开bin_Win32)文件夹下的PhotonServer.config,在Application标签下添加自己服务器配置文件。
<Application Name="MyGame" BaseDirectory="MyGameServer" Assembly="MyGamePhotonServer" Type="MyGamePhotonServer.MyGameServer" ForceAutoRestart="true" WatchFiles="dll;config" ExcludeFiles="log4net.config"> </Application>
Name:这个就是程序名称
BaseDirectory就是我们发布后在deploy文件加下的路径:
Assembly:就是我们的类库工程生成的那个dll文件
Type:我们入口类的名称(要带上命名空间)
以下是完整的配置文件
<?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> </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> <!-- 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> </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="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 --> <MyGameInstance MaxMessageSize="512000" MaxQueuedDataPerPeer="512000" PerPeerMaxReliableDataInTransit="51200" PerPeerTransmitRateLimitKBSec="256" PerPeerTransmitRatePeriodMilliseconds="200" MinimumTimeout="5000" MaximumTimeout="30000" DisplayName="MyGameDemo" > <!-- 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="MyGame"> </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="MyGame" > </TCPListener> </TCPListeners> <!-- 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="MyGame"> <!-- MyGame Application --> <Application Name="MyGame" BaseDirectory="MyGameServer" Assembly="MyGamePhotonServer" Type="MyGamePhotonServer.MyGameServer" ForceAutoRestart="true" WatchFiles="dll;config" ExcludeFiles="log4net.config"> </Application> </Applications> </MyGameInstance> </Configuration>
7.启动服务器程序 MyGameDemo
到此为止我们的第一个Photon Server 服务器就搭建好了。
来自:https://blog.csdn.net/u010812661/article/details/78710548