基于PHOTON(光子)的服务器端开发II

Photon Server

Link Start!

1.Photon简介

Photon官网

内核基于C/C++编写,运行速度较快,但使用时使用C#(.NET环境),适用于小型工作室或个人开发者
photon cloud相当于云服务器端,只需开发客户端,服务器端由photon提供(功能受限)
photon server则需要自己手动开发服务器端(功能全面)
支持UDP、TCP、WS、HTTP协议

2.Photon SDK

(1)在官网下载安装好SDK,打开安装目录,lib文件夹存放的一般为动态链接库。deploy文件夹存放部署的项目,在deploy文件夹下win32/win64文件夹PhotonControl进行对应版本photon的开启。doc文件夹下为API说明书,英语较好的同学可以看一看了解下(注:解压目录不能包含中文字符)
(2)在官网注册后申请Max100CCU上限的License,将下载好的license文件复制到win32/win64目录下,重启photon即可识别license
(3)真正将photon作为游戏服务器的话建议购买容量更大的license

3.Config配置文件

(1)打开win64文件夹下(我的计算机系统为64位,因此下文全部使用64位相关内容)PhotonServer.config文件,在块内配置服务器各项信息(photon已经给出一个配置实例MmoDemo,可以模仿进行配置)
(2)给出我自己的配置信息进行解释说明
<!-- Instance settings -->
<MyGameInstance
        MaxMessageSize="512000"
        MaxQueuedDataPerPeer="512000"
        PerPeerMaxReliableDataInTransit="51200"
        PerPeerTransmitRateLimitKBSec="256"
        PerPeerTransmitRatePeriodMilliseconds="200"
        MinimumTimeout="5000"
        MaximumTimeout="30000"
        DisplayName="PVP_demo">

    <UDPListeners>
        <UDPListener
                IPAddress="0.0.0.0"
                Port="5055"
                OverrideApplication="PVP_demo">
        </UDPListener>
    </UDPListeners>

    <TCPListeners>
        <TCPListener
                IPAddress="0.0.0.0"
                Port="4530"
                PolicyFile="Policy\assets\socket-policy.xml"
                InactivityTimeout="10000"
                OverrideApplication="PVP_demo">
        </TCPListener>
    </TCPListeners>

    <Runtime
            Assembly="PhotonHostRuntime, Culture=neutral"
            Type="PhotonHostRuntime.PhotonDomainManager"
            UnhandledExceptionPolicy="Ignore">
    </Runtime>

    <Applications Default="PVP_demo">
    <!-- PVP_demo Application -->
        <Application
                Name="PVP_demo"
                BaseDirectory="MyGameServer"
                Assembly="MyGameServer"
                Type="MyGameServer.MyGameServer"
                ForceAutoRestart="true"
                WatchFiles="dll;config"
                ExcludeFiles="log4net.config">
        </Application>
    </Applications>
</MyGameInstance>
①DisplayName 即在photon server展示的项目名称
②UDPListeners 即UDP配置
IPAddress="0.0.0.0" 表示开放所有可用IP可连接到服务器
Port="5055" 端口号
③TCPListeners 即TCP配置
PolicyFile="Policy\assets\socket-policy.xml" 即policy文件存放位置
④Application
BaseDirectory="MyGameServer" 项目位置(基于deploy文件夹)
Assembly="MyGameServer" 指令集
ForceAutoRestart="true" 是否自动重启

4.创建服务器端项目

(1)新建类库MyGameServer,右键—>重新生成即可在项目下debug文件夹内找到对应的dll文件
(2)在deploy下新建文件夹MyGameServer,将项目输出路径更改为刚才新建的文件夹MyGameServer,以后重新生成得到的文件会直接存放到deploy下的MyGameServer文件夹方便部署
(3)添加引用,所有用到的dll文件都在photon下lib文件夹内,下面罗列出需要添加的文件:
ExitGamesLibs.dll
Photon.SocketServer.dll
PhotonHostRuntimeInterfaces.dll

5.创建主类

(1)新建类 MyGameServer,将其设置为public class
(2)继承自ApplicationBase并实现抽象类
using Photon.SocketServer;
//引入命名空间 Photon.SocketServer;
namespace MyGameServer
{
    public class MyGameServer : ApplicationBase
    {
        //客户端请求连接方法
        protected override PeerBase CreatePeer(InitRequest initRequest)
        {
            return new ClientPeer(initRequest);
        }

        //用于初始化的方法
        protected override void Setup()
        {
        }

        //server关闭时的方法
        protected override void TearDown()
        {
        }
    }
}  

6.创建ClientPeer类

(1)新建类 ClientPeer,将其设置为public class
(2)继承自Photon.SocketServer.ClientPeer并实现抽象类
namespace MyGameServer
{
    
    public class ClientPeer : Photon.SocketServer.ClientPeer
    {
         public ClientPeer(InitRequest initRequest):base(initRequest)
        {
        }

        //处理客户端断开链接后的操作
        protected override void OnDisconnect(DisconnectReason reasonCode, string reasonDetail)
        {
        }

        //处理客户端请求
        protected override void OnOperationRequest(OperationRequest operationRequest, SendParameters sendParameters)
        {
        }
    }
}

7.配置完成后重新生成并重新启动photon,可以在日志查看项目启动情况,若

完结撒花~

絢櫻 Pid:57296407


基于PHOTON(光子)的服务器端开发II
https://baifabaiquan.cn/2020/08/01/基于Photon的服务器端开发2/
作者
白发败犬
发布于
2020年8月1日
许可协议