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