本系列教程介绍游戏服务器端框架----PhotonServer

开发工具:Unity3d2017、VS2017、PhotonServer SDK

首先到官网下载其SDK,下载地址

服务器部署

将下载下来的SDK解压

目录结构如下

deploy:部署程序

doc:文档

lib:存放类库,在接下来的客户端(Unity3d)和服务器端开发需要引用到

src-server:Demo源码

接下来开始部署自己的游戏服务器

打开VS,新建类库

在项目中引用lib目录下的如下图五个类库

在项目中新建入口类,这里命名为MyGameServer

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using Photon.SocketServer;

using System.IO;

using ExitGames.Logging;

using ExitGames.Logging.Log4Net;

using log4net.Config;

namespace MyGameServer

{

//服务器框架主类 框架入口

class MyGameServer : Photon.SocketServer.ApplicationBase

{

//单例模式

public static ILogger LOG = LogManager.GetCurrentClassLogger();

//当有客户端接入时候调用

protected override PeerBase CreatePeer(InitRequest initRequest)

{

return new ClientPeer(initRequest);

}

//当框架启动时候调用

protected override void Setup()

{

}

//当框架停止时候调用

protected override void TearDown()

{

}

}

}

新建客户端类,这里命名为ClientPeer

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using Photon.SocketServer;

using PhotonHostRuntimeInterfaces;

namespace MyGameServer

{

class ClientPeer : Photon.SocketServer.ClientPeer

{

public ClientPeer(InitRequest ir) : base(ir) { }

//该客户端断开连接

protected override void OnDisconnect(DisconnectReason reasonCode, string reasonDetail)

{

}

//该客户端出操作请求

protected override void OnOperationRequest(OperationRequest operationRequest, SendParameters sendParameters)

{

}

}

}

这里一个简单的服务端程序写好了,在PhotonServer的depoly目录下新建一个文件夹,这里命名为MyGame,再创建一个子目录,命名为bin

在右键项目->属性,将项目生成路径配置到刚刚创建的bin目录下

右键项目->点击生成

在MyGame->bin目录下生成执行程序

配置文件:在bin_Win64打开PhontonServer.config文本文件(XML)

打开配置文件,发现里面有两个示列程序,复制粘贴一个做为自己的

MaxMessageSize="512000"

MaxQueuedDataPerPeer="512000"

PerPeerMaxReliableDataInTransit="51200"

PerPeerTransmitRateLimitKBSec="256"

PerPeerTransmitRatePeriodMilliseconds="200"

MinimumTimeout="5000"

MaximumTimeout="30000"

DisplayName="LoadBalancing (MyCloud)">

IPAddress="0.0.0.0"

Port="5055"

OverrideApplication="Master">

IPAddress="0.0.0.0"

Port="5056"

OverrideApplication="Game">

IPAddress="0.0.0.0"

Port="4530"

OverrideApplication="Master"

PolicyFile="Policy\assets\socket-policy.xml"

InactivityTimeout="10000"

>

IPAddress="0.0.0.0"

Port="4531"

OverrideApplication="Game"

PolicyFile="Policy\assets\socket-policy.xml"

InactivityTimeout="10000">

IPAddress="0.0.0.0"

Port="4520">

IPAddress="0.0.0.0"

Port="843"

PolicyFile="Policy\assets\socket-policy.xml">

IPAddress="0.0.0.0"

Port="943"

PolicyFile="Policy\assets\socket-policy-silverlight.xml">

IPAddress="0.0.0.0"

Port="9090"

DisableNagle="true"

InactivityTimeout="10000"

OverrideApplication="Master">

IPAddress="0.0.0.0"

Port="9091"

DisableNagle="true"

InactivityTimeout="10000"

OverrideApplication="Game">

Assembly="PhotonHostRuntime, Culture=neutral"

Type="PhotonHostRuntime.PhotonDomainManager"

UnhandledExceptionPolicy="Ignore">

Name="Master"

BaseDirectory="LoadBalancing\Master"

Assembly="Photon.LoadBalancing"

Type="Photon.LoadBalancing.MasterServer.MasterApplication"

ForceAutoRestart="true"

WatchFiles="dll;config"

ExcludeFiles="log4net.config"

>

Name="Game"

BaseDirectory="LoadBalancing\GameServer"

Assembly="Photon.LoadBalancing"

Type="Photon.LoadBalancing.GameServer.GameApplication"

ForceAutoRestart="true"

WatchFiles="dll;config"

ExcludeFiles="log4net.config">

Name="CounterPublisher"

BaseDirectory="CounterPublisher"

Assembly="CounterPublisher"

Type="Photon.CounterPublisher.Application"

ForceAutoRestart="true"

WatchFiles="dll;config"

ExcludeFiles="log4net.config">

MaxMessageSize="512000"

MaxQueuedDataPerPeer="512000"

PerPeerMaxReliableDataInTransit="51200"

PerPeerTransmitRateLimitKBSec="256"

PerPeerTransmitRatePeriodMilliseconds="200"

MinimumTimeout="5000"

MaximumTimeout="30000"

DisplayName="MMO Demo"

>

IPAddress="0.0.0.0"

Port="5055"

OverrideApplication="MMoDemo">

IPAddress="0.0.0.0"

Port="4530"

PolicyFile="Policy\assets\socket-policy.xml"

InactivityTimeout="10000"

OverrideApplication="MMoDemo"

>

IPAddress="0.0.0.0"

Port="843"

PolicyFile="Policy\assets\socket-policy.xml"

InactivityTimeout="10000">

IPAddress="0.0.0.0"

Port="943"

PolicyFile="Policy\assets\socket-policy-silverlight.xml"

InactivityTimeout="10000">

IPAddress="0.0.0.0"

Port="9090"

DisableNagle="true"

InactivityTimeout="10000"

OverrideApplication="MMoDemo">

Assembly="PhotonHostRuntime, Culture=neutral"

Type="PhotonHostRuntime.PhotonDomainManager"

UnhandledExceptionPolicy="Ignore">

Name="MMoDemo"

BaseDirectory="MmoDemo"

Assembly="Photon.MmoDemo.Server"

Type="Photon.MmoDemo.Server.PhotonApplication"

ForceAutoRestart="true"

WatchFiles="dll;config"

ExcludeFiles="log4net.config">

Name="CounterPublisher"

BaseDirectory="CounterPublisher"

Assembly="CounterPublisher"

Type="Photon.CounterPublisher.Application"

ForceAutoRestart="true"

WatchFiles="dll;config"

ExcludeFiles="log4net.config">

MaxMessageSize="512000"

MaxQueuedDataPerPeer="512000"

PerPeerMaxReliableDataInTransit="51200"

PerPeerTransmitRateLimitKBSec="256"

PerPeerTransmitRatePeriodMilliseconds="200"

MinimumTimeout="5000"

MaximumTimeout="30000"

DisplayName="MyGameServer (LJL)">

IPAddress="0.0.0.0"

Port="5055"

OverrideApplication="MYGameServer">

IPAddress="0.0.0.0"

Port="4530"

OverrideApplication="MYGameServer"

PolicyFile="Policy\assets\socket-policy.xml"

InactivityTimeout="10000"

>

IPAddress="0.0.0.0"

Port="4520">

IPAddress="0.0.0.0"

Port="843"

PolicyFile="Policy\assets\socket-policy.xml">

IPAddress="0.0.0.0"

Port="943"

PolicyFile="Policy\assets\socket-policy-silverlight.xml">

IPAddress="0.0.0.0"

Port="9090"

DisableNagle="true"

InactivityTimeout="10000"

OverrideApplication="MYGameServer">

Assembly="PhotonHostRuntime, Culture=neutral"

Type="PhotonHostRuntime.PhotonDomainManager"

UnhandledExceptionPolicy="Ignore">

Name="MYGameServer"

BaseDirectory="MyGame"

Name="CounterPublisher"

BaseDirectory="CounterPublisher"

Assembly="CounterPublisher"

Type="Photon.CounterPublisher.Application"

ForceAutoRestart="true"

WatchFiles="dll;config"

ExcludeFiles="log4net.config">

日志输出

在MyGameServer的Setup函数里添如下代码

//当框架启动时候调用

protected override void Setup()

{

//设置配置文件属性

log4net.GlobalContext.Properties["Photon:ApplicationLogPath"] = Path.Combine(Path.Combine(this.ApplicationRootPath, "bin_Win64"), "log");//设置日志文件存储目录

//日志配置文件

FileInfo logConfigFileInfo = new FileInfo(Path.Combine(this.BinaryPath, "log4net.config"));

if (logConfigFileInfo.Exists)//配置文件存在

{

//设置Photon日志插件为Log4Next

LogManager.SetLoggerFactory(Log4NetLoggerFactory.Instance);

//Log4Next这个插件读取配置文件

XmlConfigurator.ConfigureAndWatch(logConfigFileInfo);

}

LOG.Info("服务器初始化完成");

}

测试

运行PhotonServer,运行MyGameServer

发现在bin_Win64->log文件夹下成功生成了MyGameServer.log文件

打开日志文件,有打印,表明配置成功

photon 服务器操作系统,PhotonServer游戏服务器部署及日志输出之美相关推荐

  1. photon 服务器操作系统,PhotonServer游戏服务器端教程

    老师我是看了泰斗破坏神的服务器,但是在利用Phtonserver从数据库中获取服务器的列表,它无法获取,哪个说ssl主机本地主机不支持 //实现父类的抽象方法 处理收到客户端的请求的方法 ... 追评 ...

  2. 服务器操作系统linux,关于服务器的操作系统

    1.服务器操作系统都有哪些? 服务器操作系统一般分两类,一类是linux占据了大量的服务器市场份额,一类是windows server占有少量的市场份额.服务器操作系统的市场和PC操作系统的市场恰巧是 ...

  3. 攻击游戏服务器 修改数据库,游戏服务器数据库修改器

    游戏服务器数据库修改器 内容精选 换一换 应用容器化改造有三种方式,您可单击这里查看.本教程以某游戏为例,将该游戏进行微服务的架构改造,再进行容器化.本教程不对改造细节做深度讲解,仅讲解大致的建议.如 ...

  4. 战地4稳定的服务器,战地4 游戏服务器

    战地4 游戏服务器 内容精选 换一换 华为云帮助中心,为用户提供产品简介.价格说明.购买指南.用户指南.API参考.最佳实践.常见问题.视频帮助等技术文档,帮助您快速上手使用华为云服务. 您可以修改云 ...

  5. 游戏服务器排队系统,游戏服务器排队功能

    游戏服务器排队功能 内容精选 换一换 座席已签入座席登录后,获取当前座席已签入技能队列上的排队人数.设置成"GET".该接口仅支持GET方法,不支持PUT.POST和DELETE等 ...

  6. 如何修改游戏服务器,怎样修改游戏服务器

    怎样修改游戏服务器 内容精选 换一换 华为云帮助中心,为用户提供产品简介.价格说明.购买指南.用户指南.API参考.最佳实践.常见问题.视频帮助等技术文档,帮助您快速上手使用华为云服务. 远程登录裸金 ...

  7. 游戏页面显示服务器未开,网关游戏服务器未开启

    网关游戏服务器未开启 内容精选 换一换 通过以下方法确保API网关调用后端服务器的安全:为API绑定签名密钥.在绑定签名密钥后,API网关到后端服务的请求增加签名信息,后端服务收到请求后计算签名信息, ...

  8. 华为全网通怎么显示无服务器,全网通游戏服务器

    全网通游戏服务器 内容精选 换一换 如果网站直接无法访问,可能是由于安全组没有放行网站或者远程连接工具使用的端口.本节操作以80端口为例介绍排查云服务器端口不通问题的操作步骤.如果实例无法对外提供HT ...

  9. 游戏服务器异常修复,游戏服务器异常修复

    游戏服务器异常修复 内容精选 换一换 您可以通过"应用管理"页面的应用列表,快速查看应用状态,及相关异常信息,如图1所示.包括:应用状态:即图1中的①应用异常信息:即图1中的②云服 ...

最新文章

  1. ajax html成功 asp,AJAX ASP
  2. POJ 3469 Dual Core CPU (最小割建模)
  3. [CentOS7] systemd
  4. linux 无线网卡休眠,无线网卡在Linux下活起来
  5. 每天Leetcode 刷题 初级算法篇-杨辉三角
  6. java static final泛型类对象
  7. 数学建模常用算法汇总及python,MATLAB实现(七) —— sklearn和SPSS实现主成分分析
  8. ELEMENTARY: Is Even
  9. shell脚本使用两个横杠接收外部参数
  10. 分享下nas使用技巧,以及最简单的远程开机(用HS-200S做演示)
  11. java隐藏字符_Java原生隐藏字符-工具类
  12. 移动端网页唤醒app
  13. 日本市场智能电视的主要功能
  14. 快速打造一款新款爆品可以这么做
  15. 如何经营一家水果店,怎么做好水果店的经营
  16. 树莓派3B+配置WiFi(基于raspbian系统)
  17. 爬虫小案例之爬取京东商品链接
  18. 永磁同步电机滞环电流控制
  19. 水文监测场景的数据通信规约解析和落地实践
  20. Office 365系列之十五:配置Outlook MAPI方式连接Exchange Online

热门文章

  1. java安装32位环境遇到的问题
  2. ubuntu 16.04 出现failed to start session解决方法
  3. python 调用cplex-学术版
  4. 谷歌中国算法比赛解题报告 APAC2015C
  5. 分享Silverlight/WPF/Windows Phone一周学习导读(11月21日-11月27日)
  6. 萤火虫算法_每日论文38:基于改进萤火虫算法的分布式电源优化配置
  7. 使用 js 把当前面下载成为图片
  8. 本科计算机专业考研跨考传媒,这8大专业考研最容易扎堆,你扎堆了么?
  9. VM14+CentOS7安装
  10. ensp静态综合实验报告