因为游戏还处在开发阶段,所以使用的是免费版的Photon(100人),有人数上限限制,然后问题来了,我该如何监测玩家的在线人数呢?下面系统分享以下Photon使用经验。

Photon服务器引擎

  • 一、在线玩家人数监测方法
  • 二、Photon服务器搭建
    • 1、简介
    • 2、配置Photon服务器
    • 3、Photon客户端开发
  • 三、Photon服务器常见问题

一、在线玩家人数监测方法

了解Photon的基本原理可以知道,Photon是通过IPhotonListener.OnStatusChanged()方法告知连接状态的改变,这个方法的参数是枚举类型 StatusCode。

这个枚举有以下类型:

没错,就是它!

当photon监听到用户人数达到并发用户限制,会断开服务器连接。
所以,我们可以用如下方式实现在线玩家人数上限实时监测。

 public void OnStatusChanged(StatusCode statusCode){switch (statusCode){case StatusCode.Disconnect:DebugReturn(DebugLevel.INFO, "@@@@@@Disconnect");PlayerController.instance.CancelInvoke();PlayerController.instance.StopAllCoroutines();photonPeer.Connect(ServerAddress, ServerAppName);break;case StatusCode.TimeoutDisconnect:DebugReturn(DebugLevel.INFO, "@@@@TimeoutDisconnect");break;case StatusCode.DisconnectByServer:DebugReturn(DebugLevel.INFO, "@@@@DisconnectByServer");break;case StatusCode.Connect:DebugReturn(DebugLevel.INFO, "@@@@Connected");connected = true;break;case StatusCode.Exception:DebugReturn(DebugLevel.INFO, "@@@@Exception");photonPeer.Connect(ServerAddress, ServerAppName);break;case StatusCode.ExceptionOnConnect:DebugReturn(DebugLevel.INFO, "@@@@ExceptionOnConnect");break;case StatusCode.ExceptionOnReceive:DebugReturn(DebugLevel.INFO, "@@@@ExceptionOnReceive");break;case StatusCode.DisconnectByServerUserLimit:Debug.Log("玩家人数超载!");DebugReturn(DebugLevel.INFO, "@@@@DisconnectByServerUserLimit");GameObject.Find("UserOverLoadPanel").SetActive(true);break;default:DebugReturn(DebugLevel.ERROR, statusCode.ToString());break;}}

二、Photon服务器搭建

1、简介

Photon的特点是长连接,是集产品、服务于一体的网络引擎,也是最快、最灵活、最容易上手的网络引擎,可在PC、Mac、浏览器、移动终端、控制台等多个平台上建立可扩展的MMOG、FPS及任何多人在线网络游戏和应用。

Photon地址:https://www.photonengine.com/en/server

Photon引擎收费方式
Photon证书分为个人版与企业版,目前价格如下表所示:
个人版:
无人数限制,价格为4800元
企业版:
500人同时在线 8900元
1000人同时在线 12500元
无人数限制 19600元
备注:个人版、企业版100人同时在线的证书永久免费。

Photon服务器和Unity 3D客户端的通信机制

  1. 发送请求到Photon服务器
  2. 处理Photon服务器返回的响应
  3. 完成游戏房间的操作
  4. 实现自定义事件

详情可参考此博客:Unity 3D Photon服务器

2、配置Photon服务器

Photon地址:https://www.photonengine.com/en/server
1.安装Photon SDK
前往Photon官网下载v3.1版本的SDK。下载完毕后解压可得到deploy、doc、lib和src-server共4个文件目录。deploy是各个平台下的photon服务器可执行文件。doc是帮助文件。lib是已经编译好的dll文件,部署服务器时使用。src-server里面是游戏demo源码。

2.运行PhotonControl.exe文件
运行PhotonControl.exe,在工具栏中找到photon服务器的图标,右键选择Default->Start as application(不同版本Photon可能不一样,有的是Default)运行Photon服务器。成功后photon服务器图标是蓝色的,否则就是运行异常。

3.设置Photon配置文件
我们可以通过deploy中不同平台目录下的PhotonServer.config配置文件来修改Photon服务器的配置。在配置文件中,default节点里可以设置传输的最大消息尺寸、最大/最小超时时限。在UDPListener和TCPListener节点中可以设置监听UDP和TCP连接的ip地址和通信端口。在Websocket节点中可以进行Websocket通信的一些设置。Application节点比较重要,每个Application的name在通讯接口方法调用时要用到。

4.检查Windows系统里的端口和防火墙设置
启动Default->Run TestClient ,运行客户端测试程序,如果在运行过程中弹出Windows防火墙提示,就需要在Windows防火墙里开放了Photon配置文件中设定的协议端口。如果没有弹出提示,必要时需要在Windows防火墙高级设置中手动创建入站规则。因为在这种情况下有可能防火墙是针对Photon服务器程序创建的入站规则,不限制使用端口。而我们可以手动创建针对UDP和TCP通信的特定端口的入站规则。

5.Photon异常排查
当我们启动PhotonControl.exe后,点击图标中的Default->Start as application,运行一段时间服务器停止,图标变为灰色,说明Photon服务器运行异常。我们需要先检查一下Photon服务器的端口设置。如果排除了端口和防火墙设置的影响,我们可以通过日志文件Photon-Default查看是否是启动Photon服务器过程中发生了异常。如果排除了Photon服务器启动异常,就需要打开各个游戏服务端程序的日志文件查看是哪个游戏服务器程序异常。

3、Photon客户端开发

1.Unity 3D连接Photon服务器
导入Photon3Unity3D.dll到U3D工程的Assets/Plugins目录下。编写客户端脚本文件与Photon服务器通信,继承IPhotonPeerListener接口并实现OnStatusChanged接口方法。在Update方法中调用PhotonPeer对象的Service方法就可以与Photon服务器通信了。只有调用Service方法,我们才能正常与服务器进行连接和通信。

2.向Photon服务器发送请求
首先需要编写一个SendMessage函数,从客户端向服务器发送请求,使用PhotonPeer对象的OpCustom方法来发送请求。同时需要实现OnOperationResponse和OnEvent接口方法来处理服务器返回的结果。

3.处理Photon服务器返回的响应
实现OnOperationResponse函数;
可以通过OperationCode分析服务器返回响应的类型。;
编写函数处理Photon服务器返回的消息;

4.自定义事件
实现OnEvent函数;
设定游戏操作枚举;
传输自定义数据参数;

三、Photon服务器常见问题

1、Photon引擎是一定要部署在windows平台上的吗?
Photon应用主要基于.net环境,而不限于具体的操作系统平台,但考虑到目前对于linux下.net虚拟机支持不是太完善,因此建议最好使用windows平台作为生产环境。

2、Photon引擎是否提供对数据库的支持?
Photon引擎本身是不提供对数据库操作接口的,开发者可以自行选择使用目前的诸如:Oracle、MS Sql Server、MySql、DB2等主流的关系型数据库以及NHibernate的ORM技术甚至NoSQL技术等。

3、Photon引擎和Unity自带的网络功能比,优点有那些呢?
Photon不能简单的理解为网络库,除了性能强健的服务器端引擎外Photon支持大部分客户端平台,可开发各种平台上的应用,其中就包含了Unity平台。

4、Photon引擎底层网络用什么模型?
Photon引擎的网络核心主要基于Windows平台下最高效的完成端口(IOCP)异步网络模型。

5、Photon引擎的服务器能用C++、VB或者其他开发语言吗?
目前Photon提供的API是C#语言,我们建议使用C#作为应用层面的开发语言;如果使用C++、VB的话也可以,但需要自行做很多额外的工作。

6、Phonton引擎提供基于非托管代码的接口么?
Photon应用主要由Photon内核加载运行,且基于.NET运行环境,因此不提供非托管代码接口。

7、Photon引擎需要自己写网络同步算法吗?
对于同一个网络连接上Photon是能够保证其顺序,无需同步;但在业务层面的同步还需要开发者自行实现。

8、Photon引擎详细收费方式?
Photon证书分为个人版与企业版,目前价格如下表所示:
个人版:
无人数限制,价格为4800元
企业版:
500人同时在线 8900元
1000人同时在线 12500元
无人数限制 19600元
备注:个人版、企业版100人同时在线的证书永久免费

9、Photon个人版证书与企业版证书的区别?
使用个人版证书的开发者会有两方面的限制 :
1、被许可人每月收入低于6万人民币
2、被许可人的产品突出显示Photon的LOGO

10、运行PhotonControl的app 会出现几秒钟内自动停止,这是什么原因?
可能的原因有3种:
1、证书校验没有通过:证书过期或者没有连上浮动证书服务器
2、端口被占用:如酷狗占了848端口或者9090端口被占用;
3、某个应用的程序有问题,也会导致Photon引擎启动不了,一般需要检查应用入口类的构造方法以及setup等方法。

11、为什么使用迅雷等下载工具获取证书不能正常使用?
由于证书生成服务器做了安全校验的缘故,如果使用迅雷等下载工具下载证书文件,则文件内容不正确,从而导致无法正常使用;因此,建议使用另存为方式获取证书文件。

12、Photon支持哪些客户端平台?
目前Photon主要支持:Unity、iOS、Flash、Windows、.NET、Android、Silverlight等。

13、Photon和Unity之间有什么联系?Photon包含了Unity还是Unity包含了Photon?
Photon和Unity是两个较为独立的产品,所专注的技术领域不同,Photon主要提供服务器端引擎功能的支持,同时对各个客户端平台(包括iOS、Android、WinForm、Cocos2D、Flash、SilverLight以及Unity等)提供相关支持,具有执行效率高、开发效率高、开发部署简单以及配置灵活等特点;而Unity则是客户端图形引擎领域的产品。目前Photon和Unity是一种战略合作关系,前者专注于网络和服务器功能,后者专注于客户端图形方面。
Photon客户端SDK提供了对Unity平台以及其他平台的支持,而不是Unity的组成部分。同时Photon可以和任意主流客户端平台进行有效结合。

14、Photon的高版本在功能和使用层面是否能够兼容低版本?
Photon高版本功能以及在使用方面是向低版本兼容的,但是有部分功能需要稍作调整。

在线玩家人数上限实时监测(Photon)相关推荐

  1. 堡垒之夜哪个服务器人最多,《堡垒之夜》全球同时在线玩家人数峰值高达1千万...

    <堡垒之夜>全球同时在线玩家人数峰值高达1千万 堡垒之夜同时在线人数达1000万 据外媒报道,<堡垒之夜>全球同时在线玩家数量本月刷新两项新纪录.在2月2日的Marshmell ...

  2. python爬虫——获取依据steam当前在线玩家人数排列的最热门游戏

    先看一个爬虫入门的小程序--获取中国最好大学排名 import requests from bs4 import BeautifulSoup allUniv = [] def getHTMLText( ...

  3. 饥荒如何修改服务器人数上限,饥荒联机版房间人数上限可以修改吗?怎么更改房间人数?...

    很多玩家在玩饥荒联机版的时候,都想知道在饥荒游戏房间里,可以更改玩家人数上限吗?那么怎么将房间人数上限设置成无上限呢?接下来就跟小编一起来看看吧. 小编推荐 饥荒联机版怎么设置房间人数上限? 先关掉游 ...

  4. 王者荣耀在线服务器,王者荣耀实时对战服务器Photon之PUN介绍

    PUN基础教程是基于Unity3D的教程. 它将向您展示如何开发由Photon Cloud提供支持的多人实时在线应用程序,以及如何使用Animator使用人物进行动画处理. 我们将随着许多重要的功能和 ...

  5. 微型水质监测站——在线实时监测水质数据

    一.产品概述 微型水质监测站是一款用于河道.水渠.湖泊.水池等场景水质监测设备,设备采用自带太阳能发电系统供电,无需另外供电,安装方便,使用简单.可以在线实时监测水质数据,当水质数据超过阈值后触发告警 ...

  6. cod传感器探头 在线实时监测

    禹山cod传感器探头具有在线监测功能,因此被广泛运用于废水湖泊.河流或工业废水等的在线不间断监测当中.主要原因为∶ 第一,紫外吸收COD在线监测仪可在数秒内完成对紫外光的吸收作用,并可快速进行处理器的 ...

  7. 基于PaddlePaddle的智慧课堂实时监测系统

    项目基于 PaddlePaddle 和 EasyDL 平台,以教务处和学工为一级用户,高校教师为二级用户,针对提升整体课堂教学质量为目的开发的一款实时课堂监测系统. 本项目主要监测课堂的出勤人数.学生 ...

  8. 实时监测tcp链接状态_实录基坑坍塌,让你重视基坑监测!

    https://v.qq.com/x/page/a08829c0jhb.html 南宁绿地中央广场房地产项目 D号地块(二期)基坑北侧 约60米支护桩突然崩塌 所幸无人伤亡 ​ 在工程中,基坑塌方屡见 ...

  9. 尘埃粒子计数器帮助实时监测半导体车间空气中的粒子数

    手持式尘埃粒子计数器是用于测量洁净环境中单位体积内尘埃粒子数和粒径分布的仪器,手持式尘埃粒子计数器可广泛应用于为各省市药检所.血液中心.防疫站.疾控中心.质量监督所等权威机构.电子行业.制药车间.半导 ...

最新文章

  1. datagridview 点击列标题排序
  2. js中图片显示用ajax,javascript - 前台用ajax上传图片,怎么让图片上传完成显示的缩略图片的时候显示分辨率大小...
  3. lpk.dll是什么
  4. SAP历史库存MB5B的详解
  5. 什么原因可能导致主备延迟?
  6. 神经网络与深度学习——TensorFlow2.0实战(笔记)(四)(python模块、包和库)
  7. Linux Shell脚本专栏_自动发布Java项目(tomcat)_10
  8. Cartographer—ROS中的安装
  9. js最简单的几个特效_腊八蒜最简单做法,掌握这几个诀窍快速变绿,又脆又香,真过瘾...
  10. Java不满足的依赖异常_java – 新的缺失/不满足的依赖项WildFly 9中的错误
  11. 51nod 1050 循环数组最大子段和【环形DP/最大子段和/正难则反】
  12. 电子面单打印模板规格汇总-快递鸟
  13. C++ Primer 5th - 1.1 编写一个简单的C++程序
  14. javascript实现常用的设计模式
  15. emmc host调用mmc_rescan发现设备
  16. 芒种时节,某地为何无人收割小麦?
  17. matlab模拟化学反应,Matlab环境下化学反应动力学的MonteCarlo模拟
  18. 谷歌十大高薪职位:首席软件工程师居首
  19. 强化学习9——贝尔曼方程
  20. 人面不知何处去,桃花依旧笑春风……

热门文章

  1. McAfee新手详尽攻略(转东转西)
  2. HBuilderX Git操作
  3. XSS漏洞利用之cookie获取
  4. 用友软件(U8)中新增菜单
  5. gdb查看内存地址和栈中的值
  6. Mysql锁机制之行锁、表锁、死锁
  7. 几点产品经理必备的经济学知识
  8. 微信公众号配置IP白名单返回“errcode”: 40164
  9. 扎克伯格引发讨论:创始人是否应该担任CEO?
  10. Origin输出图片坐标轴超出画布部分被截去/显示不全