基于pomelo的小游戏开发

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

开发实例
捡宝Demo
玩家在单一场景中检取宝物,获得积分
支实例-捡宝Demo
捡宝Demo
开发实例-捡宝Demo
搭建Demo
• • • •
初始化Pomelo项目 构建场景服务 使用Pomelo进行通信 服务架构扩展和分析
开发实例-捡宝Demo
初始化工程
• 安装pomelo
持加入自定义的路由规则, 自定义的 filter 等。
pomelo介绍
服务器的抽象与分类 该架构把游戏服务器做了抽象, 抽象成为两类:前端服务器和后端服务器, 如图: 1、前端服务器的职责:
•负责承载客户端请求的连接
•维护session信息 •把请求转发到后端 •把后端需要广播的消息发到前 端 2、后端服务器职责: •处理业务逻辑, 包括RPC和 前端请求的逻辑 •把消息推送回前端
客户端的请求、响应与 web 应用是类似的, 但框架是基于长连接的, 实现模式与 http 请求有一
定差别。 广播是游戏服务器最频繁的操作, 需要方便的 API, 并且在性能上达到极致。 • 服务器间的通讯、调用 尽管框架尽量避免跨进程调用,但进程间的通讯是不可避免的, 因此需要一个方便好用的 RPC 框架来支撑。 • 松耦合、可插拔的应用架构。 应用的扩展性很重要, pomelo framework 支持以 component 的形式插入任何第三方组件, 也支
nodejs介绍
Node采用一系列“非阻塞”库来支持事件循环的方式。 本质上就是为文件系统、数据库之类的资源提供接口。当你向文件系统发送一 个请求时,无需等待硬盘(寻址并检索文件),硬盘准备好的时候非阻塞接口会通 知Node。该模型以可扩展的方式简化了对慢资源的访问,直观,易懂。尤其是对于 熟悉onmouseover、onclick等DOM事件的用户,更有一种似曾相识的感觉。
议头。然后,发送“Hello World!”并关闭连接。
您可能会注意到,必须显式的关闭连接。发送流数据到客户端后忘记关闭连接是个 很常见的错误。
如果你运行这个脚本,到http://localhost:8124/在 浏览器中,你将看到“Hello
World!”
pomelo介绍
什么是pomelo? Pomelo 是基于 Node.js 的高性能、分布式游戏服务器框架。它包括基础的开发框架 和相关的扩展组件(库和工具包),可以帮助你省去游戏开发枯燥中的重复劳动和 底层逻辑的开发。Pomelo 不但适用于游戏服务器开发, 也可用于开发高实时 Web 应用,它的分布式架构可以使 Pomelo 比普通的实时 Web 框架扩展性更好。
• 广播模式
– 服务端对客户端 – 1 to N
• 服务端之间的RPC调用
开发实例-捡宝Demo
nodejs介绍
Node是一个Javascript运行环境(runtime)。 实际上它是对Google V8引擎(应用于Google Chrome浏览器)进行了封装。 V8引擎执行Javascript的速度非常快,性能非常好。Node对一些特殊用例进行了优
化,提供了替代的API,使得V8在非浏览器环境下运行得更好。例如,在服务器环
pomelo介绍
为什么使用pomelo?
高并发、高实时的游戏服务器的开发是很复杂的工作。跟 web 应用一样, 一个好的开源容器或
开发框架可以大大减少游戏开发的复杂性,让开发变得更加容易。遗憾的是目前在游戏服务器开 发领域一直没有太好的开源解决方案。 pomelo 填补了这个空白,pomelo 的优势有以下几点: •架构的可伸缩性好。 采用多进程单线程的运行架构,扩展服务器非常方便, node.js 的网络 io 优势提供了高可伸缩性。 •使用非常容易, 开发模型与web应用的开发类似,基于 convention over configuration 的理念, 几乎零配置, api 的设计也很精简, 很容易上手。
pomelo介绍
pomelo使用现状
Realtime application 网易消息推送平台,已上线 中国平安客服系统
Games N款移动网络游戏正在开发中
pomelo介绍
pomelo特性 •快速、易上手的游戏开发模型和api •高可伸缩的多进程架构, 支持MMO的场景分区和其它各类分区策略 •方便的服务器扩展机制,可快速扩展服务器类型和数量 •方便的请求、响应、广播、服务器通讯机制, 无需任何配置 •注重性能,在性能、可伸缩性上做了大量的测试、优化 •提供了较多扩展组件,包括游戏开发常用的库和工具包 •提供了完整的MMO demo代码(客户端html5),可以作为很好的开发参考 •基于socket.io开发,支持socket.io支持的多种语言客户端
•框架的松耦合和可扩展性好, 遵循 node.js 微模块的原则, framework 本身只有很少的代码,
所有 component、库、工具都可以用 npm module 的形式扩展进来。任何第三方都可以根据自己 的需要开发自定义 module。 •提供完整的开源 MMO 游戏 demo 参考,一个超过1万行代码的游戏 demo,使开发者可以随时 借鉴 demo 的设计与开发思路。
境中,处理二进制数据通常是必不可少的,但Javascript对此支持不足,因此, V8.Node增加了Buffer类,方便并且高效地处理二进制数据。因此,Node不仅仅简
单的使用了V8,还对其进行了优化,使其在各环境下更加给力。
nodejs介绍
V8引擎本身使用了一些最新的编译技术。 这使得用Javascript这类高级语言编写出来的代码与用C这类低级语言写出来 的代码性能相差无几,却节省了开发成本。对性能的苛求是Node的一个关键因素。 Javascript是一个事件驱动语言,Node利用了这个优点,编写出可扩展性高的服务 器。Node采用了一个称为“事件循环(event loop)”的架构,使得编写可扩展性高 的服务器变得既容易又安全。提高服务器性能的技巧有多种多样。Node选择了一种 既能提高性能,又能减低开发复杂度的架构。这是一个非常重要的特性。并发编程 通常很复杂且布满地雷。Node绕过了这些,但仍提供很好的性能。
pomelo介绍
服务器间RPC调用的抽象介绍 架构中各服务器之间的通讯主要是通过底层RPC框架来完成的,该RPC框架主要解 决了进程间消息的路由和RPC底层通讯协议的选择两个问题。服务器间的RPC调用 也实现了零配置。实例如下图所示:
pomelo介绍
pomelo支持可插拔的component扩展架构 component是pomelo自定义组件,开发者可自加载自定义的component。 component在pomelo框架参考将有更深入的讨论。以下是component的生命周期图 用户只要实现component相关的接口: start, afterStart, stop, 就可以加载自定义的组 件:app.load([name], comp, [opts])
成为事实上的平台。
nodejs介绍
。单线程 。非阻塞式IO 。V8执行引擎 。事件驱动
nodejs介绍
Javascript模块
http
https
fs
util
……
C模块
net
buffer
child_process
file
……
事件库
uv
libeio
libev
nodejs介绍
出众的性能
单线程的性能优势
pomelo介绍
服务器抽象的实现 利用目录结构与服务器对应的形式, 可以快速实现服务器的抽象。 图中的connector, area, chat三个目录代表三
类服务器类型, 每个目录下的handler与
remote决定了这个服务器的行为(对外接口 )。 开发者只要往handler与remote目录填 代码, 就可以实现某一类的服务器。这让服 务器实现起来非常方便。
nodejs介绍
出众的性能
非阻塞的并发优势
nodejs介绍
nodejs介绍
nodejs介绍
长连接支持能力
5台C1设备可支持PV上千万的朋友网长连接业务
8核8G可维持13万个长连接,理论峰值可到50W
nodejs介绍
单线程的先天不足 操控多CPU的短板 --单线程程序只能在一个CPU上运行 可靠性 --一个异常影响整个线程 单线程、可靠性低、性能高 多线程,可靠性高,性能低
事件驱动nodejs介绍uvlibeiolibev事件库c模块javascript模块netbufferchildprocessfilehttphttpsfsutilnodejs介绍出众的性能单线程的性能优势nodejs介绍出众的性能非阻塞的并发优势nodejs介绍nodejs介绍nodejs介绍长连接支持能力c1设备可支持pv上千万的朋友网长连接业务8g可维持13万个长连接理论峰值可到50wnodejs介绍单线程的先天不足操控多cpu的短板单线程程序只能在一个cpu上运行可靠性一个异常影响整个线程单线程可靠性低性能高多线程可靠性高性能低nodejs介绍简单的helloworldnodejs介绍此脚本导入syshttp模块并创建了一个http服务器
nodejs介绍
简单的helloworld
nodejs介绍
此脚本导入sys和http模 块,并创建了一个HTTP服务器。 传递给http.createServer的匿名函数,将在每请求到来时被调用。 服务器被创 建之后,它会监听端口8124。 当请求到来时,我们首先发送包含内容类型和状态代码200(表示成功)的HTTP协
开发实例-捡宝Demo
编写场景服务
Driven
这些服务要在哪里运行呢?
开发实例-捡宝Demo
加入新的服务器类型
开发实例-捡宝Demo
启动场景服务
• 服务端,写完了? • 等会儿,客户端还没收到信儿呢?
开发实例-捡宝Demo
Pomelo中的通信机制
• Request/Response模式
– 请求/响应模型 – 1 to 1
• 初始化工程
开发实例-捡宝Demo
服务端目录结构
服务端代码
Connector 服务器
配置文件
服务端入口 客户端代码
开发实例-捡宝Demo
编写场景服务
• 场景是游戏世界在服务端的抽象
– 场景地图 – 人物 – 宝物
• 游戏可以很复杂,也可以很简单 • 在捡宝 demo中,场景就是游戏地图、玩 家和其中的宝物
基于pomelo的小游戏开发 suwenkuang
今天要讲的内容
1. nodejs介绍 2. pomelo介绍
3. 开发实例-捡宝Demo
4. 开发实例-坦克大战
nodejs介绍
什么是NodeJS? 第一眼看到这个词,估计你和我一样,以为它不过是一个JavaScript框架吧? 其实不是的, NodeJS--基于V8引擎的,使用事件驱动模型而不是复杂的多线程 来获得可伸缩性, 类似Ruby的EventMachine和Python的Twisted的轻量级WebServer。 是不是很有意思?嗯,如果这东东真的可用,那就是说,以后前端后端都可以都用 JavaScript来编程了, 这对于JS程序员来说,真是一个莫大的福音,因为你们可以翻身做后端了。
pomelo介绍
客户端请求与响应、广播的抽象介绍 所有的web应用框架都实现了请求与响应的抽象。尽管游戏应用是基于长连接的, 但请求与响应的抽象跟web应用很类似。下图的代码是一个request请求示例: 请求的api与web应用的ajax请求很象,基于Convention over configuration的原则, 请求不需要任何配置。
pomelo介绍
Pomelo的组成架构如图所示:
pomelo介绍
pomelo的架构设计目标: • 服务器(进程)的抽象与扩展 在 web 应用中, 每个服务器是无状态、对等的, 开发者无需通过框架或容器来管理服务器。 但 游戏应用不同, 游戏可能需要包含多种不同类型的服务器,每类服务器在数量上也可能有不同的 需求。这就需要框架对服务器进行抽象和解耦,支持服务器类型和数量上的扩展。 • 客户端的请求、响应、广播
pomelo介绍
服务器抽象的实现 填一份配置文件servers.json就可以让服务器快速动起来。配置文件内容如下所示:
pomelo介绍
客户端请求与响应、广播的抽象介绍 所有的web应用框架都实现了请求与响应的抽象。尽管游戏应用是基于长连接的, 但请求与响应的抽象跟web应用很类似。下图的代码是一个request请求示例: 请求的api与web应用的ajax请求很象,基于Convention over configuration的原则, 请求不需要任何配置。
虽然让Javascript运行于服务器端不是Node的独特之处,但却是其一强大功能。不
得不承认,浏览器环境限制了我们选择编程语言的自由。任何服务器与日益复杂的 浏览器客户端应用程序间共享代码的愿望只能通过Javascript来实现。虽然还存在其
他一些支持Javascript在服务器端运行的平台,但因为上述特性,Node发展迅猛,
相关文档
最新文档