网页游戏架构与开发dr2-经验分享.ppt_第1页
网页游戏架构与开发dr2-经验分享.ppt_第2页
网页游戏架构与开发dr2-经验分享.ppt_第3页
网页游戏架构与开发dr2-经验分享.ppt_第4页
网页游戏架构与开发dr2-经验分享.ppt_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

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

文档简介

WEBGAME开发经验分享,咖啡熊(李黎) qq: 31670540 email: 日期: 2011 - 5 - 28,目录,引言,游戏开发的程序员是否要了解游戏相关定义、逻辑。 不需要?需要?,网页游戏概述,何为网页游戏? 网页游戏与网络游戏区别? 为何会出现网页游戏? 网页游戏特征?,网页游戏其实就是用浏览器玩的游戏,它不用下载客户端,只要一台能上网的电脑就可以进行游戏。按是否需要下载客户端来划分是否网页游戏。按用户来划分是否网页游戏。 较认可定义:基于浏览器,拥有片段游戏时间的用户进行的网络游戏称为网页游戏。 下面我们主要针对这类游戏架构与开发进行讨论。 网页游戏可以看作是网站和游戏的结合体,因此它具备了这两类系统的特性。 我们不但可以把网页游戏看作是一个网站,也可以把它看作是一个网络游戏。 网站是B/S结构,网络游戏则是C/S结构,网页游戏则是这两者的结合。,网站是B/S结构。 MVC思想:浏览器通过HTTP协议发送数据请求,由控制器接受请求,通过路径委托给数据模型处理,模型通过与逻辑层和持久层的交互,把处理结果反馈给控制器,控制器根据结果组装视图,并最终反馈给客户端浏览器。,网站服务器架构,控制器(Controller),视 图 (View),模 型 (Model),逻辑层和持久层,1.浏览器请求数据,返回浏览器,2.委托模型处理,3.提交集成模块处理,4.集成模块返回处理,5.模型返回处理结果,6.准备视图,7.返回视图,网站服务器架构,Static Server、IM Server,客户端浏览器,网站服务器架构,网络游戏服务器架构,网络游戏一般采用C/S结构,客户端负责绘制游戏世界的实时画面,服务器端则负责响应所有客户端的连接请求和游戏逻辑处理,并控制所有客户端的画面绘制,客户端与服务器通过网络数据包交互完成每一步游戏逻辑。 网关服务器方式,主要职责是将客户端通信和游戏服务器隔离。 网关服务器只负责解析数据包、加解密、超时处理、过滤错误包,客户端只需建立和网关服务器的连接即可进入游戏,无需与游戏服务器直接连接。 网关服务器分为LoginGate(登录网关服务器)、GameGate(游戏网关服务器)。,网络游戏服务器架构,1.LoginGate主要负责在玩家登录时维护客户端与LoginServer之间的网络连接与通讯,对 LoginServer和客户端的通信数据进行加密、校验。 2.LoginServer主要功能验证玩家账号是否合法,并生成一个登录凭证SESSIONKEY。 3.GameGate主要负责客户端与GameServer之间网络连接和通讯,对客户端请求和发送数据做简单分析。 4.GameServer主要负责游戏逻辑处理,包括战斗系统、任务系统、角色系统、地图系统等。 5.DBServer主要负责游戏数据缓存,包括玩家游戏属性数据,降低数据库压力。 6.Mserver负责一组服务器中对多台GameServer之间数据转发和广播。 7.Mysql负责数据持久化存储。,网络游戏服务器架构,网络游戏服务器架构,服务器使用Linxu系统,Nginx Webserver, MySQL数据库, PHP FastCGI环境,PHP做核心功能与逻辑功能开发,聊天和部分实时性功能使用C+。 一个游戏区采用12台服务器为一组。Web Server、DB Server主从、Memcache Server、逻辑运算 Server,老区节约成本可用12台服务器,新区可用24台分开架构根据游戏区压力而定。 Static Server做CDN,所有区共用。 IM Server所有区共用。,网页游戏服务器架构,用户通过浏览器访问服务器的时候,首先是访问网页服务器,通过网页服务器,再去访问游戏逻辑层,通知游戏逻辑层执行玩家操作,并从游戏逻辑层里获得游戏数据,或者直接通过访问数据库而获得游戏数据。,网页游戏服务器架构,网页服务器的特点是触发执行,及当有用户访问网页的时候,才会执行该网页的程序代码。而我们常见的WebGame实际上是需要24小时不间断执行的,因此网页服务器的执行方式并不适合做游戏。因此我们另外需要一个应用程序来执行这些24小时不间断要做的事情。 这也就是我们需要增加游戏服务器设计思路的原因。,网页游戏服务器架构,客户端浏览器,WEB服务器 (逻辑运算层),CACHE数据层,公共数据库,玩家数据库,客户端浏览器,WEB服务器 (逻辑运算层),玩家数据库,战斗逻辑运算服务器群,服务端事件系统,什么是事件系统 事件系统是整个WebGame系统里一个核心的组成部分,它控制着游戏的进程,使游戏能够及时执行到期命令。 事件是指游戏里玩家的某个活动指令,它可以分为瞬时活动和非瞬时活动。 瞬时活动顾名思义就是在玩家发出指令的瞬间就能完成的活动。 玩家从NPC里购买一瓶药水,在玩家发出这个指令后,玩家的金钱减少,药水增加1瓶,这一切都在玩家发出指令后瞬间完成。,而非瞬时活动则是在玩家发出某个指令后一段时间才会被执行。 例如RPG游戏里玩家鼠标点击地图上某个怪物进行攻击。这个攻击过程就是一个非瞬时过程,它有了一个战斗的过程,这个过程需要消耗一定的时间。 在WebGame里,玩家的很多操作可以看作时候瞬时事件和非瞬时事件的结合。 例如在策略游戏里升级建筑物,瞬时事件是村庄资源减少,非瞬时事件是建筑物建设,非瞬时事件的结果是建筑物等级上升。 比如策略游戏中的军队战争,瞬时事件是当前村庄的士兵减少,非瞬时事件是减少的士兵移动到需要攻击的村庄,结果是,两个村庄开打了。,服务端事件系统,事件队列 前面说了瞬时事件和非瞬时事件的概念,当WebGame24小时运行的时候,系统就会产生大量的非瞬时事件,通常把这些非瞬时事件统一拿出来,按事件的结束时间进行排序,并组成一个队列(事件队列)。再通过一个触发器,在事件设定的结束时间到达的那一刻执行对应的事件。,服务端事件系统,实现方式 数据库 建立数据库内存表存放事件队列,通常会存在开始时间、结束时间、事件类型、事件参数等数据。PHP写一个FOR循环进程查询事件队列内存表,如果有到期时间的队列则进行处理并删除该条队列数据。 LINUX消息队列 通过LINUX消息队列存储游戏事件队列,PHP定时监听该消息队列中是否有待处理的事件队列,进行处理并删除该条队列数据。,服务端事件系统,数据库存储方式与内存存储方式对比: 游戏中的事件队列会比较多,体现在数量和类型上。各种各样的事件队列。 SLG游戏中: 1.城池建造建筑。 2.城池间战争。 3.城池造兵。 4.研究科技。 RPG游戏中: 1.战斗打怪或PK。 2.连续打怪挂机。 3.修炼挂机。 4.技能修炼。,LINUX消息队列存储的优势在于降低了PHP进程对数据库查询压力,缺点是服务器宕机,内存中存储的消息事件队列将会丢失,RPG打怪事件队列丢失影响不大,只是当前打的这个怪物无效,但是其他类型的事件队列丢失话有可能影响巨大,还有查询到期事件的效率问题。,客户端玩家发起战斗事件指令,服务端PHP接收到该事件,进行战斗合法性验证后将该事件即相关运算数据存储到LINUX消息队列中,PHP战斗进程监听LINUX消息队列。 如果发现消息队列中有战斗事件: 1.PHP运算进程进行运算。 2.PHP运算进程在运算完之后将运算结果写入玩家战斗结果DB内存表中存储,并将战报借助IM推送到客户端进行播放。(注:战斗结果是存DB中还是存入LINUX消息队列或MEMCACHE内存中?) 3.PHP战斗结束进程监听数据库中玩家战斗结果表,战斗结束时间到,则删除该条数据, 并处理战斗奖励。 4.避免玩家重复发起战斗事件,可以在服务端通过玩家ID验证是否有正在战斗的战斗队列。(注:是否需要做服务端战斗状态验证?怎么做?查询检索?),RPG战斗进程,综上分析,服务端战斗相关进程会有两个以上,PHP监听战斗事件并运算进程,PHP监听战斗结束进程。 PHP处理战斗运算进程可以扩展出战斗运算分布式服务器。,校对玩家机器和服务器端的时间 -防止客户端时间篡改 -更准确的完成事件交互 -客户端定时器长时间运行后和服务端时间会有时间差。,游戏时间校对,SLG网页游戏中常见的建筑建造倒计时、策略战争队伍行军倒计时。 RPG网页游戏中连续怪物攻击、挂机等功能。,网页游戏中常见的资源储备按小时产量时间递增功能。,数据库设计,对于任何项目,一个好的数据库设计极其重要,对于WEBGAME来说就更是重中之重了。一个好的数据库设计相当于一付好的骨架和脉络,当你的骨架搭建好,脉络理顺后,再进行游戏功能代码的时候将会非常顺畅。 怎么样才能设计好一款WEBGAME的数据库呢?,在设计前因做好如下准备: 1.对于游戏业务逻辑要相当清晰。 2.多和游戏策划人员进行沟通,充分了解游戏功能需求。 3.发现游戏逻辑部分有矛盾时及时向策划人员反馈、调整。 4.对于游戏功能先按模块进行划分,然后再细化到每张表结构。 5.对于游戏逻辑复杂的功能点需要反复推敲。,数据库设计,开始设计数据库的时候因注意: 表名、字段名规范化,按游戏功能模块划分逻辑相近的表放在一起。 合理的区分游戏配置数据表和玩家数据表。 游戏配置数据表和游戏玩家数据表在表名上区分开,或则分库。 合理权衡表结构的逻辑关系、性能优、易理解、易扩展。 表字段类型长度设置合适,能用int就不要用varchar,能用mediumint就不要用int。 合理使用数据库表的纵切与横切来降低表压力。 合理规划表结构,常用字段和非

温馨提示

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

评论

0/150

提交评论