这是精心收集的精品经典资料,值得下载保存阅读!

网游服务器端寻路

面向多核、分布式

2008-12

金山软件 陈杰

bitcowboy@

剔泣奸祟坍嫁藐兢槛纠利磅澈逸酵杰茫倚投比深税驴瑰蟹热拉如蛇鹰预枚在线服务器服务器路径在线服务器服务器路径

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中。

热拉登陆找不到服务器,在线服务器服务器路径.ppt相关推荐

  1. 口令红包 java,[1.7.2]Gifts — 我的世界服务器在线礼物和登陆奖励插件

    ==========*介绍*========= 是不是经常有服里的玩家闹着发福利呢,是不是用give指令用着蛋疼呢 这个插件帮助你--简洁的礼物派发,简单的每日登陆奖励! ==========*用法* ...

  2. MT4登陆找不到服务器,mt4找不到指定登录服务器的解决办法

    一个mt4账户要正常登录交易,就需要有指定登录服务器.账号.密码,这三样缺一不可,同时这三样也要完全正确,不能有输入错误.现在mt4在设置密码的时候大都要求有大小写字母或数字符号并用,如果对输入的密码 ...

  3. 类似于QQ游戏百万人同时在线的服务器架构实现

    本文作者:sodme 本文出处:http://blog.csdn.net/sodme 版权声明:本文可以不经作者同意任意转载,但转载时烦请保留文章开始前两行的版权.作者及出处信息. QQ游戏于前几日终 ...

  4. 百万用户同时在线游戏服务器架构实现.doc 基于epoll 通信模型

    http://wenku.baidu.com/view/02033d0af78a6529647d53fc.html 百万用户在线网络游戏服务器架构实现 一.            前言 事实上100万 ...

  5. 腾讯云轻量服务器在线安装MySQL

    腾讯云轻量服务器在线安装MySQL 一.安装环境 1.服务器提供商 ​ 腾讯云 2.操作系统 ​ Ubuntu Server 20.04 LTS 64bit 二.在线安装MySQL 1.切换到root ...

  6. 百万人同时在线直播的服务器,QQ游戏百万人同时在线的服务器架构实现

    近日在与业内人士讨论时,提到QQ游戏的实现方式并不是我原来所想的那样,于是,今天又认真抓了一下QQ游戏的包,结果确如这位兄弟所言,QQ游戏的架构 与我当初所设想的那个架构相差确实不小.下面,我重新给出 ...

  7. 大型多人在线游戏服务器架构设计

    由于大型多人在线游戏服务器理论上需要支持无限多的玩家,所以对服务器端是一个非常大的考验.服务器必须是安全的,可维护性高的,可伸缩性高的,可负载均衡的,支持高并发请求的.面对这些需求,我们在设计服务器的 ...

  8. 时空之巅服务器在线玩,我的世界时空之巅服务器

    我的世界时空之巅服务器,适用于1.7和1.8全版本,最高容纳500人,集生存.空岛.海岛和各种小游戏,非常值得你一玩哦,赶快叫上你的朋友加入吧. [我的世界时空之巅服务器详细信息] 服务器名称:时空之 ...

  9. 登陆服务器和游戏服务器为甚要分开总结

    登陆服务器和游戏服务器为甚要分开 摘自知乎 把游戏登陆逻辑单独成一个服务的优点有如下几点: 登陆入口唯一.:游戏如果不是自己运营,则需要上其他平台.每个平台只能有一个登陆服务器,但是游戏逻辑服务器要跟 ...

最新文章

  1. 基于模糊聚类的色彩迁移算法
  2. Transformer的潜在竞争对手QRNN论文解读,训练更快的RNN
  3. 最新全球自由职业技能单日排行
  4. 2021-03-09 Local Lipschitz 可能存在 有限时间逃逸
  5. PyTorch教程(八):常见激活函数与Loss的梯度
  6. Hadoop单机环境配置
  7. #3864. Hero meet devil dp套dp + 状压 + 状态机
  8. 联想平板刷机机器人_消费终端年出货量破1.2亿,杨元庆:联想是智能化转型的赋能者...
  9. php 取数组数量_PHP array_slice():截取数组的一部分
  10. Qt工作笔记-发送端发送Json格式的数据包,接收端解析数据包
  11. c语言 inline函数的总结,C++中inline函数详解
  12. stm32F051系列 单片机引脚定时器输出pwm波形控制风扇转速
  13. 中国急性髓系白血病药物市场趋势报告、技术动态创新及市场预测
  14. java并发多线程面试_Java多线程并发面试问答
  15. python基础篇–变量和简单的数据类型(下)
  16. matlab畸变程度计算,matlab 畸变校正代码
  17. C1WebChart 图形化处理。
  18. 【重磅整理】180篇NeurIPS2020顶会《强化学习领域》Accept论文大全
  19. qq病毒java代码_刚刚遭遇QQ病毒
  20. css clac计算属性

热门文章

  1. 史上最猛“员工”,疯狂吐槽亿万富翁老板小扎:那么有钱,还总穿着同样的衣服!...
  2. Java开发必须会的技能!java页面导出数据到excel
  3. 找出数组中其中最大的数及其下标
  4. 如何以聪明的方式提问
  5. 研发提效:通过设计稿自动生成前端代码
  6. b站爬虫,用于查询主播舰队用户等级构成
  7. 机电revit的【桥架转化】功能,识别CAD图纸点击转化
  8. 搭建内网音频直播源基于天津相声广播音频
  9. 【前端用法】html5实现地理位置定位(JS获取当前地理位置的方法)
  10. 有公众号的情况下,复用资质快速注册小程序