重型网络游戏服务器的框架设计

1.休方便使用互斥锁,因为经过切换的时间片远远于线程切换,对于一个高并发服务器是无能为力同意这样大时间片的切换代价的。因此须设计好服务器的框架,尽量避开使用锁机制,但要保证数据不离谱。

三、参考:

  • 数码收集与埋点
  • HEAP
  • MIXPANEL
  • 事件模型
  • Google Measurement
    Protocol
  • 埋点参数参考

更过简单舒缓达丝游玩产品,见识到了戏行业的乱七八糟,虽然与风俗软件行业对比,少了那么几规范,但是对私有力量要求还真不可比传统软件行业小。

5. 几乎种埋点的一枝独秀以状况对比

  • 比方:以电商APP的订单结算页面也例,当用户点击去结算按钮

    • 可视化埋点与无埋点只能采集到用户以某时某刻点击了失去结算
    • 客户端单代码埋点能搜集到失去结算订单的金额,商品名称、用户等等客户端可取的消息
    • 服务端代码埋点可以搜集到货物库存、成本等另涉嫌的音
  • 总结:

    • 可视化埋点使用和部署比较简单,但数据获得力简单
    • 客户端代码埋点埋点复杂,能将到以客户端保存之信
    • 服务端代码埋点能赢得到事件外的涉及属性,但部署会影响线上业务代码逻辑和搭,对于这种外信息,建议离线做join完成
埋点方式 数据时效 数据可靠(安全) 数据可回溯 埋点成本 对业务的影响 用户流量开销 新埋点是否对所有客户端版本生效
传统代码埋点 X X X X X X X
可视化埋点 X X X X
无埋点 X X X
Measurement Protocol X X X X
    数据可回溯是指当上新的事件埋点统计后,支持对历史数据(埋点之前的日期)的统计,且不用回滚数据

3.一个线程出错,例如内存非法访问,栈空间被摔,那么服务器进程就离,所有玩家掉线,影响格外。

1. 代码埋点(客户端)

  • 原理

    • 苟统计有页面一个Button点击事件次数。首先在APP或者界面初始化的上,初始化埋点SDK,然后于此Button事件闹时即调用SDK里面相应的道,发送接口发送数据
    • App端为了避免浪费用户之流量,一般情况下,都是用大半漫长数据打包,并且等待网络状况可以以及用处于前台时才压缩上传
  • 优点

    • 支配精准: 可以好纯粹地挑什么时候发送数据
    • 自从定义:随意自定义属性、自定义事件
  • 不足

    • 人力成本高

      埋点地方了多,因为不同之版验证问题不同是被管理。每一个控件的埋点都得添加相应的手工代码,不仅工作量非常,而且限定了必须是技术人员才能够好

    • 本更新的代价十分,易导致埋点混乱

      各一样涂鸦创新埋点方案,就代表必须使改代码,然后经逐条渠道进行分发,一旦产生相当多数量的用户指向新版的翻新不感冒时,导致埋点代码能够收集到之数码吧就算得不顶创新,前功尽弃,很麻烦在事实上日常运营着能立刻依赖实时数据捕获焦点做出应变

    • 多少传的时效性和可靠性不好保证

      • 客户端埋点的痛病
    • 支持的统计大多是简约计数,无法完成整体的多维分析功能
  • 采用场景以及成品举例

    • 状况:常用来简单的pv统计,如网站pv、APP的DAU等本数据
    • 其三正值产品:umeng TalkingData Google
      Analytics

服务器是为此来处理高并发的伸手,同时会满足扩展的事情逻辑的求,最根本之凡满足三接触:并发性,稳定性,扩展性。

2. 可视化埋点(客户端)

  • 原理
    • 参考手游APP的做法,把核心代码和布置、资源分开,在APP启动之早晚经过网络创新配备与资源
    • 当虚拟的可视化界面,对支持的控件类型的实例,点击配置事件(event),然后发布,配置通过后端接口直接发给APP,所有安装有内置SDK的APP都见面在开行时还是定时获取相应的安排。以后,真实的用户以时,点击是按钮,就见面发送事件到后端
    • 兑现细节:
      1. 以放权了SDK的APP开启可视化埋点模式,与后端联通时,SDK会应后端平的求,定期(例如每秒)做一样糟糕截图,而SDK在也App截图的还要,会从keyWindow对象开始开展遍历它的subviews(),得到时视图下具有
        UIView、UIResponder对象的层级关系。对于屏幕上的另一个UIView对象,如
        Button、Textfield等它都来同等长长的唯一的于keyWindow到其的途径,这个路上每个节点,都由ClassName、它是父节点的第几独subview、.text()等性之值等标识。相对于父节点的坐标、长宽高等可视化方面的音讯,是用作这节点的特性在。
      2. 劳动端根据截屏和可视化信息来再次展开页面渲染,并且根据控件的型,来鉴别哪些控件是可增加但埋点的,并且用之标识出来。
      3. 当使用者在后台的截屏画面及点击了有可埋点的控件时,后台会要求使用者做有事变波及方面的安排,并且以布信息进行保存与配备。
      4. SDK
        在启动或例行轮询时用到这些配置信息,则会通过.addTarget:action:forControlEvents:接口,为每个关联的控件添加的点击或者编辑行为之监听,并且于回掉函数里面调用
        Sensors Analytics SDK 的接口发送相应事件之 track 信息。

美高梅4688.com 1

event.png

  • 优点

    • 可视化埋点很好地解决了代码埋点的埋点代价大和更新代价十分点儿只问题。
      • 新增埋点在富有版本生效,不存老版本迭代问题(只要老版本app有搭sdk)
    • 未理解代码的出品运营人员为足以经后台可视化界面配置统计埋点并实时发出至客户端生效

  • 不足

    • 可视化埋点能够覆盖的作用有限的,目前连无是拥有的控件操作都足以透过这种方案进行定制
    • 无能够打定义设置事件性质
      • 比如说对于评价“提交”事件,并无克以评论的内容作为事件之属性进行上传
      • 当上传事件不时,就只好上传SDK自动采集之设施、地域、网络等默认属性,以及一些通过代码设置的大局公共属性了
    • 数码传的时效性和可靠性不好保证
      • 客户端埋点的痛病
  • 利用场景和制品

    • 场景:
      • 代表代码埋点,支持产品、运营等不技术人员管理埋点
      • 举手投足/新力量快速上线迭代时之效力评估,可使用可视化埋点快速到位
    • 其三在产品: 诸葛io MixPanel 神策数据

 

4. Google Measurement Protocol

上述的老三栽埋点都是于客户端埋点,都用客户端嵌入sdk
否避免浪费用户流量,都亟需定时或定量的批量打包发送数据

  • 原理

    • 以待埋点/追踪事件的地方(客户端或服务端),以确定的格式/规范/协议,把有关的风波性质信息及相关字段通过HTTP请求发送至指定的接收服务器
  • 优点

    • 实时发送数据,不存在数量延时
    • 用丝上及线下行为联系在合
    • 可又于客户端和服务器发送数据
  • 缺点

    • 需要手动在代码中埋点
    • 设想到用户流量消耗问题,不可能把具有的用户事件还埋点
    • 乍的埋点需要发新版

3.么服务器进程非常退出,只要非是网络通讯进程(一般是都见面比较稳定,没什么逻辑),那么尽管可就给医护进程又开,不见面招致玩家掉线,只见面招致在1-2秒内,某个逻辑功能无法以,甚至玩家还觉得不至。

相同、什么是事件?

今非昔比为传统的页面路径跳反追踪,事件尝试追踪用户以网站或APP上有的各国一个动作(包括浏览页面)

  • 咦是事件

    • 追踪或记录之用户作为或业务过程(注册账号,登录,观看视频,点赞,评论,关注等等)
    • 事件三因素

      • 操作(action):定义一个操作动作(如点击、拖拽)
      • 参数/属性:参数可以是其他与此波相关的属性,包括触发这个事件的(人、时间、地点、设备、操作的事情信息)
        • 举例:
          • 对一个“购买”类型的波,则恐得记录之字段有:商品名称、商品档次、购买数、购买金额、
            付款方式等;
          • 于一个“搜索”类型的轩然大波,则恐得记录的字段有:搜索关键词、搜索类型等
          • 于一个“点击”类型的轩然大波,则恐得记录的字段有:点击
            URL、点击 title、点击位置等
          • 于一个“用户注册”类型的轩然大波,则恐得记录的字段有:注册渠道、注册邀请码等
          • 于一个“用户投诉”类型的轩然大波,则恐得记录的字段有:投诉内容、投诉对象、投诉渠道、投诉方式相当
          • 对此一个“申请退货”类型的事件,则可能需要记录之字段有:退货金额、退货原因、退货方式相当。
      • 属性值:参数/属性之值参

        • 比方: 参数与价值为kv形式储存于json串中

            {"age": 13, "gender": "male", "photo filetype": "png"}
          

优点:

二、埋点

时下的埋点方式:
随埋点工具:代码埋点、可视化埋点、‘无埋点’
依照埋点位置:前段/客户单埋点、后端/服务端埋点

缺点:

6. 我们的挑选

A、可视化埋点/无埋点:
出品或技术对
活动/新力量快速上线迭代时的功效评估,可采用可视化埋点快速到位
现实行使哪种方案还要考虑客户端代码改动成本

B、参考Measurement Protocol数据收集和殡葬正式,根据工作定制化埋点

网络通讯层,业务逻辑,数据存储,分别以单身的线程中,无守护进程。

3. 无埋点(全埋点)(客户端)

Heap Analytics
作为最早提出这种方案提供商,早以2013年尽管已生产了“无埋点”这个技能方案。后续之用户作为分析的大佬Mixpanel也在去年中期推出同样的劳动,诸葛IO为借鉴了两岸,在国内最为早正式推出了三老平台的无埋点分析方案,同时,国内也还有TalkingData的机灵分析及Growing
IO提供了无埋点分析解决方案

  • 原理

    • 于App中坐SDK,做统一之“全蒙点”,将APP的操作尽量多的采集下来,然后通过界面配置的道对重要行为开展定义,这样就是成功了所谓的“无埋点”数据收集
      1. 先在成品达挂一个 SDK
      2. 由此可视化的方法,生成配置信息,也即是事件名称之类的概念
      3. 用集的数目以部署更命名,进而就可知做分析了
  • 优点

    • 解决了数码“回溯”的题材
      • 例如,在某个同上,突然想搭有控件的点击的剖析,如果是可视化埋点方案,则不得不于立等同随时为后采访数据,而若是“无埋点”,则由配置
        SDK 的时候数据就是一直都以搜集了
    • “无埋点”方案为堪活动取很多启发性的音,例如,“无埋点”可以告知使用者这个界面及每个控件分别于点击的票房价值是基本上酷,哪些控件值得做更进一步的分析等等
  • 缺点

    • 同可视化埋点一样,“无埋点”依然没缓解覆盖的操作简单问题,不可知灵活地由定义属性
    • 数量传的时效性和可靠性不好保证
      • 客户端埋点的痛病
    • 出于拥有的控件事件都举搜集,可能会见叫服务器和网传输带来双重不行之载重
  • 暨可视化埋点的别

    • 可视化埋点先经界面配置哪些控件的操作数据要募
    • “无埋点”则是先尽可能收集所有的控件的操作数据,然后再度经过界面配置如何数据要在网里进行解析
  • 行使场景和产品

    • 观:和可视化埋点相同
    • 其三正产品:Heap
      Analytics Growing
      IO

缺点:

2.免便民监督各个线程状态,容易死锁

其次、多进程单线程的服务器设计模式,多只过程,每个过程就生一个线程:

网路通讯,业务逻辑,数据存储,守护进程,分别在不同之长河。

2.强联网类玩耍,典型的饶是MMORPG或者MMARPG的花色的娱乐,一般大于端游或者页游,也饱含手游。在一个地图中,同时发生过多玩家,任何一个玩家的状态或者性质发生变化,服务器即需要实时更新游戏受角色的状态,并且通知到周围的玩家。例如当副本中,一个玩家放飞技能,攻击范围,伤害计算这些逻辑都是服务器来完成的,而客户端只需要担特效的展示,这个过程被要实时的数量交互。

2.大多进程编程,在相继进程之中会有诸多通讯,跨服务器进程的异步消息比较多,会于服务器的编码难度加大。

美高梅4688.com 2

上述是一个戏耍服务器最基础的职能框架图,接下要召开的便是设计服务器的框架了。

 

眼下市场上的娱乐,总的来说分为两好像:

 

1.数据共享和交换方便,使用全局变量或者单例就好,数据存储方便。

对服务器的并发性,要么用单进程多线程,要么用多进程单线程的办法,说说少种植方法的利弊:

5.并发性美高梅4688.com相对多线程要高点。

一个大型的网落游戏服务器应该包含几只模块:网络通讯,业务逻辑,数据存储,守护监控(不是必须),其中工作逻辑可能基于具体需要,又细分为某些只子模块。

1.弱联网类游戏,像手机上的卡牌类游戏(MT,Dota传奇等),大部分逻辑在客户端处理,不需要实时联网,这仿佛娱乐就发生一个玩家,而且只有PVE模式,就是打游戏中之机器人(AI),不有玩家和玩家的实时互动。例如一庙会副本打斗,只有在开始与了结,才见面连续服务器,请求获取或者存储数据,打斗过程由于客户端计算好,最后用征战结果提交服务器就执行了。

4.服务器通过共享内存进行数据交换,那么一旦内部一个服务器死掉,数据还于,可以保护用户数量(当然多线程也得以用共享内存)。

1.有机能只能在单个物理服务器上,不能够做成分布式。

脚先随一个娱乐之效用,将服务器的功用一分为二框架画出来:

1.挨家挨户进程可以分布在不同的物理服务器上,可以做成分布式的服务器框架,例如可以拿数据存储单独置于一个大体服务器上,供几单区的服务器使用。将网络通讯进程独立出来,甚至足以做成导向服务器,实现跨服战。

2.单历程,服务器框架结构相对简单,编码容易。

 

 

 

显著,第2栽,MMORPG类游戏需要服务器做更多之工作,对服务器的运算要求再胜,实时性要求又强,自然实现起来重复杂。

 

2.好由此守护进程监控其它进程状态,例如有过程死掉,马上还开该过程,或者有进程cpu使用率接近100%(基本可以判断是某逻辑死循环了),
强制kill掉该过程,然后还开。

一律、单进程多线程的服务器设计模式,只出一个进程,但一个经过包多独线程:

 

此地说的模块可依赖一个进程,或者一个线程方式有,本质上便是有的类似的卷入。

优点:

 

今天开头,陆续用业余时间将团结统筹之一个服务器的框架贴出来,也会见确保好有中坚的代码,也会用到部分开源库。从极度基础的发话起,首先看一个实时网络游戏服务器的框架:

发表评论

电子邮件地址不会被公开。 必填项已用*标注