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