欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    《网游服务器端寻路》PPT课件.ppt

    • 资源ID:5641921       资源大小:1.29MB        全文页数:31页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    《网游服务器端寻路》PPT课件.ppt

    网游服务器端寻路,面向多核、分布式,2008-12金山软件 陈杰,NPC寻路问题,很重要(虽然也可以不要)游戏玩法与NPC的寻路能力直接相关计算量很大数据结构和算法的相对复杂一台服务器上数万个NPC一起寻路有挑战,寻路与其它模块的关系,寻路在游戏中是一个相对底层的模块NPC的AI系统依赖于一个可靠的寻路算法寻路模块依赖于游戏对地图的描述寻路模块基本上是一种服务模块,总是被调用,但是自己不需要主动去做什么事情,寻路的一种实现,在游戏逻辑服务器内实现一个A star算法,在逻辑地图描述数据上(CELL)搜索。效率很低可能会阻塞主循环增加服务器复杂度,目标,Need for Speed!将性能提升100倍!在单位时间内出更多的结果不能影响游戏逻辑的主循环更好的利用多核,甚至多台计算机的运算能力如何在逻辑很复杂,数据结构很复杂,为了提高效率而指针满天飞的情况下,让服务器跑稳定?如何更方便的在游戏运营过程中逐步改进巡逻模块?,改进地图描述数据,Cell结构适合描述逻辑数据:Trap,Obstacle但是Cell的数量太大,直接用来A Star效率很低在NPC大多数时候不需要跳跃、游泳、空中飞行的时候,可以是用NavMesh来描述寻路所需要的地图障碍信息NavMesh使用凸多边形来描述可以移动的区域,数量通常只有CELL的几十分之一到数百分之一,将寻路模块独立为进程,为什么要独立出去?不必担心阻塞游戏服务器的主循环。不论是主服务器还是寻路模块,都变得更简单一些。为什么是进程而不是线程?寻路模块使用自己的地图描述数据,和其他逻辑模块没有太多需要共享的资源。更健壮。寻路模块本身没有状态,也没有不能丢失的动态数据。即使寻路模块挂了,也不会影响游戏的主服务器。直接重启就可以了。,寻路服务器,减少重复计算,AI的行为会经常周期性的调用寻路。附近有很多NPC,他们的坐标很接近,寻路的计算是很相似,或者完全相同的。如果将寻路的计算结果缓存起来,就可以减少重复运算。,游戏服务器组,每个逻辑服务器独享寻路服务器,一份地图的NavMesh数据需要加载到多个寻路服务进程中,浪费宝贵的内存。每个寻路进程单独Cache寻路结果,使得寻路Cache中的数据重复,命中次数下降。对于硬件需求过高。一般不可能做到每台寻路服务器都在独立的物理服务器上。,共享寻路服务器的游戏服务器组,一台物理服务器上共享数据,在不考虑地形(障碍)动态变化的情况下,NavMesh的数据是静态的。所有寻路进程可以同时读取共享数据。但是Cache是动态刷新的。必须考虑进程间的同步问题。,考虑加锁,对Cache进行加锁寻路算法每搜索一块区域时都要获取锁,然后判断Cache里是否有可以利用的数据。当寻路出新的路径时也要获取锁,并将计算结果写入Cache中。寻路过程中总是在获取锁,等于单进程跑。,读写锁,寻路过程中可以明确区分读写两个阶段寻路过程中,获取读锁来获取Cache数据。寻路结束后,获取写锁来更新Cache数据。多个进程可以同时读Cache,但是如果有进程要写Cache的话,所有进程都要等。,利用本地Cache提高并发能力,为每个进程增加一个本地的私有Cache。寻路进程算出结果后只将寻路结果更新到本地的Cache。而不是立刻去写共享的Cache。等一段时间之后,进程再一次性讲本地Cache的内容提交到共享Cache。降低了进程获取共享Cache写锁的频率,从而提高并发能力。,带本地Cache的寻路进程,锁的问题,锁的目的就是让程序变得不并行。锁本身的代价很高,特别是进程之间的锁,往往需要使用操作系统内核对象来实现,获取和释放的开销通常在1000 CPU Tick左右。锁很不安全,只有有一初代码没有按规矩来获取或者释放锁,整个系统都会出问题。,利用调度算法避免锁,引入一个调度进程。所有寻路进程的任务由调度进程分配。所有寻路进程完成寻路任务的时候向调度进程汇报。调度进程没有分配任务的时候,寻路进程不能访问共享Cache(读/写都不行)。调度进程可以在没有进程访问共享Cache的时候向一个进程分配更新共享Cache的任务。,调度进程,通过调度来实现互斥,调度进程会周期性的控制寻路进程向共享Cache中更新数据。再此之前,调度程序会保证所有的寻路进程都是等待状态。再此期间,调度程序不会向任何寻路进程发出新的寻路任务。,调度对寻路效率的影响,调度本身做的事情很简单,开销相对于寻路算法而言可以忽略不计。由于每个寻路进程有本地Cache,所以调度算法应该将同一个地图并且坐标相近的寻路任务尽量分配给同一个寻路进程。调度控制寻路进程将本地Cache提交到共享Cache的频率会影响整个系统的效率。频率太低的话,共享Cache中有效数据就少。频率太高的话,不管用不用锁写操作是互斥的。,需要避免的问题,如果调度器分配一个任务给寻路进程,但是寻路进程出错,而一直没有给调度进程发任务完成的消息。那么实际上,调度器内部的状态会“卡”住,而导致调度器不能发出更新共享Cache的指令。这个其实就和一个进程获取了锁,而一直没有释放这个锁,是一样的道理。,网络游戏服务器架构发展趋势,相似的硬件架构,服务器不停机升级,允许一个模块可以有多份实例(进程)。多个实例要求接口(协议)兼容,不需要二进制匹配。调度器可识别不同模块和版本。一旦发现新版本就停止向旧模块分配任务。当旧模块执行完当前的任务时可以卸载。,服务器崩溃恢复,引入备份模块(进程)调度器默认不给备份模块分配任务。当普通模块崩溃时,调度器自动启用备份模块重启普通模块,调度器自动停用备用模块。,模块的自动化测试,THANK YOU!,Q&A,

    注意事项

    本文(《网游服务器端寻路》PPT课件.ppt)为本站会员(小飞机)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开