基于pomelo的小游戏开发_第1页
基于pomelo的小游戏开发_第2页
基于pomelo的小游戏开发_第3页
基于pomelo的小游戏开发_第4页
基于pomelo的小游戏开发_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、基于pomelo的小游戏开发suwenkuang 今天要讲的内容nodejs介绍pomelo介绍开发实例-捡宝Demo开发实例-坦克大战nodejs介绍什么是什么是NodeJS? 第一眼看到这个词,估计你和我一样,以为它不过是一个JavaScript框架吧?其实不是的, NodeJS基于V8引擎的,使用事件驱动模型而不是复杂的多线程来获得可伸缩性,类似Ruby的EventMachine和Python的Twisted的轻量级WebServer。 是不是很有意思?嗯,如果这东东真的可用,那就是说,以后前端后端都可以都用JavaScript来编程了,这对于JS程序员来说,真是一个莫大的福音,因为你们

2、可以翻身做后端了。nodejs介绍Node是一个是一个Javascript运行环境运行环境(runtime)。 实际上它是对Google V8引擎(应用于Google Chrome浏览器)进行了封装。V8引擎执行Javascript的速度非常快,性能非常好。Node对一些特殊用例进行了优化,提供了替代的API,使得V8在非浏览器环境下运行得更好。例如,在服务器环境中,处理二进制数据通常是必不可少的,但Javascript对此支持不足,因此,V8.Node增加了Buffer类,方便并且高效地处理二进制数据。因此,Node不仅仅简单的使用了V8,还对其进行了优化,使其在各环境下更加给力。nodej

3、s介绍V8引擎本身使用了一些最新的编译技术引擎本身使用了一些最新的编译技术。 这使得用Javascript这类高级语言编写出来的代码与用C这类低级语言写出来的代码性能相差无几,却节省了开发成本。对性能的苛求是Node的一个关键因素。 Javascript是一个事件驱动语言,Node利用了这个优点,编写出可扩展性高的服务器。Node采用了一个称为“事件循环(event loop)”的架构,使得编写可扩展性高的服务器变得既容易又安全。提高服务器性能的技巧有多种多样。Node选择了一种既能提高性能,又能减低开发复杂度的架构。这是一个非常重要的特性。并发编程通常很复杂且布满地雷。Node绕过了这些,但

4、仍提供很好的性能。nodejs介绍Node采用一系列采用一系列“非阻塞非阻塞”库来支持事件循环的方式库来支持事件循环的方式。 本质上就是为文件系统、数据库之类的资源提供接口。当你向文件系统发送一个请求时,无需等待硬盘(寻址并检索文件),硬盘准备好的时候非阻塞接口会通知Node。该模型以可扩展的方式简化了对慢资源的访问,直观,易懂。尤其是对于熟悉onmouseover、onclick等DOM事件的用户,更有一种似曾相识的感觉。 虽然让Javascript运行于服务器端不是Node的独特之处,但却是其一强大功能。不得不承认,浏览器环境限制了我们选择编程语言的自由。任何服务器与日益复杂的浏览器客户端

5、应用程序间共享代码的愿望只能通过Javascript来实现。虽然还存在其他一些支持Javascript在服务器端运行的平台,但因为上述特性,Node发展迅猛,成为事实上的平台。nodejs介绍。单线程。单线程。非阻塞式。非阻塞式IO。V8执行引擎执行引擎。事件驱动。事件驱动nodejs介绍uvlibeiolibev事件库C模块Javascript模块netbufferchild_processfilehttphttpsfsutilnodejs介绍出众的性能出众的性能 单线程的性能优势nodejs介绍出众的性能出众的性能 非阻塞的并发优势nodejs介绍nodejs介绍nodejs介绍长连接支持

6、能力长连接支持能力5台C1设备可支持PV上千万的朋友网长连接业务8核8G可维持13万个长连接,理论峰值可到50Wnodejs介绍单线程的先天不足单线程的先天不足 操控多CPU的短板 -单线程程序只能在一个CPU上运行可靠性 -一个异常影响整个线程单线程、可靠性低、性能高单线程、可靠性低、性能高多线程,可靠性高,性能低多线程,可靠性高,性能低nodejs介绍简单的简单的helloworld nodejs介绍此脚本导入sys和http模 块,并创建了一个HTTP服务器。传递给http.createServer的匿名函数,将在每请求到来时被调用。服务器被创 建之后,它会监听端口8124。当请求到来时

7、,我们首先发送包含内容类型和状态代码200(表示成功)的HTTP协议头。然后,发送“Hello World!”并关闭连接。您可能会注意到,必须显式的关闭连接。发送流数据到客户端后忘记关闭连接是个很常见的错误。如果你运行这个脚本,到http:/localhost:8124/在 浏览器中,你将看到“Hello World!”pomelo介绍什么是什么是pomelo? Pomelo 是基于 Node.js 的高性能、分布式游戏服务器框架。它包括基础的开发框架和相关的扩展组件(库和工具包),可以帮助你省去游戏开发枯燥中的重复劳动和底层逻辑的开发。Pomelo 不但适用于游戏服务器开发, 也可用于开发高

8、实时 Web 应用,它的分布式架构可以使 Pomelo 比普通的实时 Web 框架扩展性更好。pomelo介绍为什么使用为什么使用pomelo?高并发、高实时的游戏服务器的开发是很复杂的工作。跟 web 应用一样, 一个好的开源容器或开发框架可以大大减少游戏开发的复杂性,让开发变得更加容易。遗憾的是目前在游戏服务器开发领域一直没有太好的开源解决方案。 pomelo 填补了这个空白,pomelo 的优势有以下几点:架构的可伸缩性好。 采用多进程单线程的运行架构,扩展服务器非常方便, node.js 的网络 io 优势提供了高可伸缩性。使用非常容易, 开发模型与web应用的开发类似,基于 conv

9、ention over configuration 的理念, 几乎零配置, api 的设计也很精简, 很容易上手。框架的松耦合和可扩展性好, 遵循 node.js 微模块的原则, framework 本身只有很少的代码,所有 component、库、工具都可以用 npm module 的形式扩展进来。任何第三方都可以根据自己的需要开发自定义 module。提供完整的开源 MMO 游戏 demo 参考,一个超过1万行代码的游戏 demo,使开发者可以随时借鉴 demo 的设计与开发思路。pomelo介绍pomelo使用现状使用现状Realtime application网易消息推送平台,已上线中

10、国平安客服系统GamesN款移动网络游戏正在开发中pomelo介绍pomelo特性特性 快速、易上手的游戏开发模型和api高可伸缩的多进程架构, 支持MMO的场景分区和其它各类分区策略方便的服务器扩展机制,可快速扩展服务器类型和数量方便的请求、响应、广播、服务器通讯机制, 无需任何配置注重性能,在性能、可伸缩性上做了大量的测试、优化提供了较多扩展组件,包括游戏开发常用的库和工具包提供了完整的MMO demo代码(客户端html5),可以作为很好的开发参考基于socket.io开发,支持socket.io支持的多种语言客户端pomelo介绍Pomelo的组成架构如图所示:的组成架构如图所示:po

11、melo介绍pomelo的架构设计目标:的架构设计目标: 服务器(进程)的抽象与扩展在 web 应用中, 每个服务器是无状态、对等的, 开发者无需通过框架或容器来管理服务器。 但游戏应用不同, 游戏可能需要包含多种不同类型的服务器,每类服务器在数量上也可能有不同的需求。这就需要框架对服务器进行抽象和解耦,支持服务器类型和数量上的扩展。 客户端的请求、响应、广播客户端的请求、响应与 web 应用是类似的, 但框架是基于长连接的, 实现模式与 http 请求有一定差别。 广播是游戏服务器最频繁的操作, 需要方便的 API, 并且在性能上达到极致。 服务器间的通讯、调用尽管框架尽量避免跨进程调用,但

12、进程间的通讯是不可避免的, 因此需要一个方便好用的 RPC 框架来支撑。 松耦合、可插拔的应用架构。应用的扩展性很重要, pomelo framework 支持以 component 的形式插入任何第三方组件, 也支持加入自定义的路由规则, 自定义的 filter 等。pomelo介绍1、前端服务器的职责:负责承载客户端请求的连接维护session信息把请求转发到后端把后端需要广播的消息发到前端2、后端服务器职责:处理业务逻辑, 包括RPC和前端请求的逻辑把消息推送回前端服务器的抽象与分类服务器的抽象与分类该架构把游戏服务器做了抽象, 抽象成为两类:前端服务器和后端服务器, 如图:pomelo

13、介绍图中的connector, area, chat三个目录代表三类服务器类型, 每个目录下的handler与remote决定了这个服务器的行为(对外接口)。 开发者只要往handler与remote目录填代码, 就可以实现某一类的服务器。这让服务器实现起来非常方便。服务器抽象的实现服务器抽象的实现利用目录结构与服务器对应的形式, 可以快速实现服务器的抽象。pomelo介绍服务器抽象服务器抽象的实现的实现填一份配置文件servers.json就可以让服务器快速动起来。配置文件内容如下所示:pomelo介绍客户端请求与响应、广播的抽象介绍客户端请求与响应、广播的抽象介绍所有的web应用框架都实现

14、了请求与响应的抽象。尽管游戏应用是基于长连接的, 但请求与响应的抽象跟web应用很类似。下图的代码是一个request请求示例:请求的api与web应用的ajax请求很象,基于Convention over configuration的原则, 请求不需要任何配置。 pomelo介绍客户端请求与响应、广播的抽象介绍客户端请求与响应、广播的抽象介绍所有的web应用框架都实现了请求与响应的抽象。尽管游戏应用是基于长连接的, 但请求与响应的抽象跟web应用很类似。下图的代码是一个request请求示例:请求的api与web应用的ajax请求很象,基于Convention over configurat

15、ion的原则, 请求不需要任何配置。 pomelo介绍服务器间服务器间RPC调用的抽象介绍调用的抽象介绍架构中各服务器之间的通讯主要是通过底层RPC框架来完成的,该RPC框架主要解决了进程间消息的路由和RPC底层通讯协议的选择两个问题。服务器间的RPC调用也实现了零配置。实例如下图所示:pomelo介绍pomelo支持可插拔的支持可插拔的component扩展架构扩展架构component是pomelo自定义组件,开发者可自加载自定义的component。 component在pomelo框架参考将有更深入的讨论。以下是component的生命周期图用户只要实现component相关的接口:

16、start, afterStart, stop, 就可以加载自定义的组件:app.load(name, comp, opts)开发实例捡宝捡宝Demo玩家在单一场景中检取宝物,获得积分支持多玩家实时记录并刷新积分开发实例-捡宝Demo捡宝捡宝Demo开发实例-捡宝Demo搭建搭建Demo 初始化Pomelo项目 构建场景服务 使用Pomelo进行通信 服务架构扩展和分析开发实例-捡宝Demo初始化工程初始化工程 安装pomelo 初始化工程开发实例-捡宝Demo服务端目录结构服务端目录结构Connector 服务器服务器服务端代码服务端代码配置文件配置文件服务端入口服务端入口客户端代码客户端代

17、码开发实例-捡宝Demo编写场景服务编写场景服务 场景是游戏世界在服务端的抽象 场景地图 人物 宝物 游戏可以很复杂,也可以很简单 在捡宝 demo中,场景就是游戏地图、玩家和其中的宝物开发实例-捡宝Demo编写场景服务编写场景服务Driven这些服务要在哪里运行呢?这些服务要在哪里运行呢?开发实例-捡宝Demo加入新的服务器类型加入新的服务器类型开发实例-捡宝Demo启动场景服务启动场景服务 服务端,写完了? 等会儿,客户端还没收到信儿呢?开发实例-捡宝DemoPomelo中的通信机制中的通信机制 Request/Response模式 请求/响应模型 1 to 1 广播模式 服务端对客户端

18、1 to N 服务端之间的RPC调用开发实例-捡宝Demo客户端与服务端通信客户端与服务端通信 Handler/Request模式开发实例-捡宝Demo与客户端的通信与客户端的通信 通过Channel来推送消息开发实例-捡宝Demo服务器之间的通讯服务器之间的通讯开发实例-捡宝Demo服务端架构服务端架构开发实例-捡宝DemoPomelo的扩展支持的扩展支持 说好的分布式架构呢? 前端服务器扩展 让我们加入更多的Connectors 场景服务器扩展 加入更多场景 客户端的扩展 支持更多类型的客户端开发实例-捡宝Demo扩展扩展Connector 加入多台connectors 连接分配问题 负载均衡 负载均衡服务器开发实例-捡宝Demo扩展场景服务扩展场景服务 加入新的场景服务器 重写路由算法开发实例-捡宝Demo分布式的服务器架构分布式的服务器架构开发实例-捡宝DemoProto压缩压缩 Config:开发实例-捡宝DemoserverProtos.json开发实例-坦克大战需求分析需求分析玩法操作方法:使用箭头键()控制方向 ,使用A键发弹移动方式: 坦克只能朝上下左右四个方向移动,最小移动单位是1/2格(地图是格子地图),坦克的发弹方向与前进向一致。地图特点:地图是格子地图,地形最小单位为一个格子:是否可通行/是否可摧毁 (砖墙,钢墙)/是否可隐蔽

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论