基于Pomelo的MMO RPG开发 网易杭州研究院 张小刚 zhang0925@gmail.com @demon0925
开始之前 多少人有Web服务的开发经验? 多少人有Game服务端的开发经验? 是否了解Pomelo框架?
主要内容 Pomelo框架介绍 基础篇 使用Pomelo框架一个简单的游戏 Demo 进阶篇 Pomelo的扩展库 展望篇 我们未来的工作
Pomelo框架
Pomelo框架运行架构
Pomelo框架总结 高可伸缩性 简单易用 强大 分布式架构 易于扩展 简单的API接口 极少的配置 基于Node.js,轻量 库和工具包支持 参考文档齐全,MMO demo
基础篇 从Demo开始 使用Pomelo构建工程 建立我们的游戏服务器 处理客户端的请求
捡宝Demo 玩家在单一场景中检取宝物,获得积分 支持多玩家 实时记录并刷新积分
搭建Demo 初始化Pomelo项目 构建场景服务 使用Pomelo进行通信 服务架构扩展和分析 参考资料
初始化工程 安装pomelo 初始化工程
服务端目录结构 服务端代码 Connector 服务器 配置文件 服务端入口 客户端代码
编写场景服务 场景是游戏世界在服务端的抽象 游戏可以很复杂,也可以很简单 在捡宝 demo中,场景就是游戏地图、玩家和其中 的宝物 场景地图 人物 宝物 游戏可以很复杂,也可以很简单 在捡宝 demo中,场景就是游戏地图、玩家和其中 的宝物
编写场景服务 Driven 这些服务要在哪里运行呢?
加入新的服务器类型
启动场景服务 服务端,写完了? 等会儿,客户端还没收到信儿呢?
Pomelo中的通信机制 Request/Response模式 广播模式 服务端之间的RPC调用 请求/响应模型 1 to 1 服务端对客户端 1 to N 服务端之间的RPC调用
客户端与服务端通信 Handler/Request模式
与客户端的通信 通过Channel来推送消息
服务器之间的通讯
服务器的鸭子类型 area connector chat frontend backend 基于websocket的server status 基于websocket的server 提供rpc服务的server
服务端架构
Pomelo的扩展支持 说好的分布式架构呢? 前端服务器扩展 场景服务器扩展 客户端的扩展 让我们加入更多的Connectors 加入更多场景 客户端的扩展 支持更多类型的客户端
扩展Connector 加入多台connectors 连接分配问题 负载均衡 负载均衡服务器
扩展场景服务 加入新的场景服务器 重写路由算法
客户端的扩展 提供更多的客户端支持 JS Client IOS Client Android/Java Client Unity 3D Client Flash Client
分布式的服务器架构
捡宝Demo
参考资料 IOS Client: Android Client: https://github.com/NetEase/pomelo-iosclient Android Client: https://github.com/NetEase/pomelo-androidclient Unity 3D Client: https://github.com/NetEase/pomelo-unityclient Flash Client: https://github.com/stokegames/pomelo-flashclient
参考资料 Pomelo快速使用指南: Treasures wiki: Treasures git : 作者:王朝 @Seeker https://github.com/NetEase/pomelo/wiki/Quick-start-guide Treasures wiki: https://github.com/NetEase/pomelo/wiki/Tutorial-2----Treasures Treasures git : https://github.com/NetEase/treasures 作者:王朝 @Seeker
这个例子,也太简单了吧? 需要保存进度!每次都从零开始,坑爹呢! 需要战斗系统!没有战斗还能叫MMO RPG? 人都跑到房子上了! 数据持久化问题 需要战斗系统!没有战斗还能叫MMO RPG? 人工智能 人都跑到房子上了! 障碍物系统和寻路 简单的全局广播,我们的服务器撑得住吗?
进阶篇 持久化问题 人工智能 寻路系统 场景细分
持久化的挑战 大量需要持久化的数据 大量事务 高实时应用 结论 移动 攻击 。。。 玩家间战斗 使用技能 大于100ms的延时是无法接受的 Sql方式无法满足我们的要求
我们的解决方案
我们的解决方案 Pomelo-sync
参考资料 Wiki: Git: 作者:尧飘海 @飘hai https://github.com/NetEase/pomelo-sync https://github.com/NetEase/pomelo/wiki/pomelo- sync%E4%BD%BF%E7%94%A8%E6%96%87%E6%A1%A3 Git: https://github.com/NetEase/pomelo-sync 作者:尧飘海 @飘hai
进阶篇 持久化问题 人工智能 寻路系统 场景细分
老虎,跑起来! 怪物的生成 怪物行为的驱动 那要怎么实现这个功能呢? 我们需要AI! 和宝物一样,随便找个坐标点扔上去得了 很简单,见人就咬就行了 那要怎么实现这个功能呢? 。。。 。。。冏 我们需要AI!
AI模块的实现 Behaviors Tree
AI应用场景 驱动怪物 自动巡逻 主动追随,攻击 放弃攻击/返回 玩家自动行为 跟随/追击 拾取道具/装备 自动攻击
Pomelo-bt Git: https://github.com/NetEase/pomelo-bt 作者:周永昶 @郁闷的武昌鱼
进阶篇 持久化问题 人工智能 寻路系统 场景细分
障碍物与寻路 飞檐走壁才叫大侠 总是有些地方是不能去的 障碍物系统 那,如何确定路径? 寻路系统
障碍物的标注
内存中的障碍物地图
寻路算法 基于矩阵的A*算法
有障碍物的情况
可能出现的悲剧
算法复杂度 在理想情况下,接近O(n) 在悲剧的情况下,O(n2) 目标不可达 实际距离远大于直线距离
Pomelo-pathfinding Git: 作者:张小刚 @demon0925 https://github.com/NetEase/pomelo-pathfinding 作者:张小刚 @demon0925
进阶篇 持久化问题 人工智能 寻路系统 场景细分
全局广播的悲剧 MESSAGES IN MESSAGES OUT 100 10000 1 100 1 100 1 100 100 1
1000 1000000 全局广播的悲剧 MESSAGES IN MESSAGES OUT 1 1000 1 1000 1000 1
必须要进行场景细分 场景细分的数据基础 AOI(Area of Intrerest) 大场景,小视野 玩家只关心视野范围内的事件 MMO RPG中广泛使用的场景细分技术 将场景划分为小的区域,仅在区域内进行广播
Pomelo-AOI 基于灯塔的AOI算法
Pomelo-AOI Git: 作者:张小刚 @demon0925 https://github.com/NetEase/pomelo-aoi 作者:张小刚 @demon0925
展望 基于字典和Protobuf的数据压缩协议 原生socket的支持 基于服务器动态扩展副本支持
参考资料 Pomelo Lordofpomelo wiki: https://github.com/NetEase/pomelo/wiki git: https://github.com/NetEase/pomelo Lordofpomelo wiki : https://github.com/NetEase/pomelo/wiki/lordofpomelo git : https://github.com/NetEase/lordofpomelo
Q & A