640 likes | 1.32k Views
基于 Pomelo 的 MMO RPG 开发. 网易杭州研究院 张小刚 zhang0925@gmail.com @demon0925. 开始之前. 多少 人 有 Web 服务 的开发经验 ? 多少人有 Game 服务端的开发经验? 是否了解 Pomelo 框架?. 主要内容. Pomelo 框架介绍 基础篇 使用 Pomelo 框架一个简单的游戏 Demo 进阶篇 Pomelo 的扩展库 展望篇 我们未来的工作. Pomelo 框架. Pomelo 框架运行架构. Pomelo 框架总结. 高可伸缩性 分布式架构 易于扩展 简单易用
E N D
基于Pomelo的MMO RPG开发 网易杭州研究院 张小刚 zhang0925@gmail.com @demon0925
开始之前 • 多少人有Web服务的开发经验? • 多少人有Game服务端的开发经验? • 是否了解Pomelo框架?
主要内容 • Pomelo框架介绍 • 基础篇 • 使用Pomelo框架一个简单的游戏 Demo • 进阶篇 • Pomelo的扩展库 • 展望篇 • 我们未来的工作
Pomelo框架总结 • 高可伸缩性 • 分布式架构 • 易于扩展 • 简单易用 • 简单的API接口 • 极少的配置 • 基于Node.js,轻量 • 强大 • 库和工具包支持 • 参考文档齐全,MMO demo
基础篇 • 从Demo开始 • 使用Pomelo构建工程 • 建立我们的游戏服务器 • 处理客户端的请求
捡宝Demo • 玩家在单一场景中检取宝物,获得积分 • 支持多玩家 • 实时记录并刷新积分
搭建Demo • 初始化Pomelo项目 • 构建场景服务 • 使用Pomelo进行通信 • 服务架构扩展和分析 • 参考资料
初始化工程 • 安装pomelo • 初始化工程
服务端目录结构 服务端代码 Connector 服务器 配置文件 服务端入口 客户端代码
编写场景服务 • 场景是游戏世界在服务端的抽象 • 场景地图 • 人物 • 宝物 • 游戏可以很复杂,也可以很简单 • 在捡宝 demo中,场景就是游戏地图、玩家和其中的宝物
编写场景服务 Driven • 这些服务要在哪里运行呢?
启动场景服务 • 服务端,写完了? • 等会儿,客户端还没收到信儿呢?
Pomelo中的通信机制 • Request/Response模式 • 请求/响应模型 • 1to 1 • 广播模式 • 服务端对客户端 • 1to N • 服务端之间的RPC调用
客户端与服务端通信 • Handler/Request模式
与客户端的通信 • 通过Channel来推送消息
服务器的鸭子类型 area connector chat frontend backend status 提供rpc服务的server 基于websocket的server
Pomelo的扩展支持 • 说好的分布式架构呢? • 前端服务器扩展 • 让我们加入更多的Connectors • 场景服务器扩展 • 加入更多场景 • 客户端的扩展 • 支持更多类型的客户端
扩展Connector • 加入多台connectors • 连接分配问题 • 负载均衡 • 负载均衡服务器
扩展场景服务 • 加入新的场景服务器 • 重写路由算法
客户端的扩展 • 提供更多的客户端支持 • JS Client • IOS Client • Android/Java Client • Unity 3D Client • Flash Client
参考资料 • IOS 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快速使用指南: 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? • 人工智能 • 人都跑到房子上了! • 障碍物系统和寻路 • 简单的全局广播,我们的服务器撑得住吗?
进阶篇 • 持久化问题 • 人工智能 • 寻路系统 • 场景细分
持久化的挑战 • 大量需要持久化的数据 • 移动 • 攻击 。。。 • 大量事务 • 玩家间战斗 • 使用技能 • 高实时应用 • 大于100ms的延时是无法接受的 • 结论 • Sql方式无法满足我们的要求
我们的解决方案 • Pomelo-sync
参考资料 • Wiki: 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模块的实现 • Behaviors Tree
AI应用场景 • 驱动怪物 • 自动巡逻 • 主动追随,攻击 • 放弃攻击/返回 • 玩家自动行为 • 跟随/追击 • 拾取道具/装备 • 自动攻击
Pomelo-bt • Git: https://github.com/NetEase/pomelo-bt • 作者:周永昶 @郁闷的武昌鱼
进阶篇 • 持久化问题 • 人工智能 • 寻路系统 • 场景细分
障碍物与寻路 • 飞檐走壁才叫大侠 • 总是有些地方是不能去的 • 障碍物系统 • 那,如何确定路径? • 寻路系统
寻路算法 • 基于矩阵的A*算法
算法复杂度 • 在理想情况下,接近O(n) • 在悲剧的情况下,O(n2) • 目标不可达 • 实际距离远大于直线距离
Pomelo-pathfinding • Git: https://github.com/NetEase/pomelo-pathfinding • 作者:张小刚 @demon0925
进阶篇 • 持久化问题 • 人工智能 • 寻路系统 • 场景细分