Photon Server游戏服务器从零开始学习(一)部署第一个服务器程序

来源:互联网 发布:hadoop DBscan算法 编辑:程序博客网 时间:2024/05/14 16:11

概述
Photon引擎是一款实时的Socket服务器和开发框架,快速、使用方便、容易扩展。

服务端架构在windows系统平台上,采用C#语言编写。

客户端SDK提供了多种平台的开发API,包括DotNet、Unity3D、C/C++以及ObjC等。

一、 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 服务器就搭建好了。

阅读全文
0 0