网页游戏架构与开发-经验分享

上传人:wm****3 文档编号:56966209 上传时间:2018-10-17 格式:PPT 页数:25 大小:850.50KB
返回 下载 相关 举报
网页游戏架构与开发-经验分享_第1页
第1页 / 共25页
网页游戏架构与开发-经验分享_第2页
第2页 / 共25页
网页游戏架构与开发-经验分享_第3页
第3页 / 共25页
网页游戏架构与开发-经验分享_第4页
第4页 / 共25页
网页游戏架构与开发-经验分享_第5页
第5页 / 共25页
点击查看更多>>
资源描述

《网页游戏架构与开发-经验分享》由会员分享,可在线阅读,更多相关《网页游戏架构与开发-经验分享(25页珍藏版)》请在金锄头文库上搜索。

1、WEBGAME开发经验分享,咖啡熊(李黎) qq: 31670540 email: 日期: 2011 - 5 - 28,目录,引言,游戏开发的程序员是否要了解游戏相关定义、逻辑。 不需要?需要?,网页游戏概述,何为网页游戏? 网页游戏与网络游戏区别? 为何会出现网页游戏? 网页游戏特征?,网页游戏其实就是用浏览器玩的游戏,它不用下载客户端,只要一台能上网的电脑就可以进行游戏。按是否需要下载客户端来划分是否网页游戏。按用户来划分是否网页游戏。较认可定义:基于浏览器,拥有片段游戏时间的用户进行的网络游戏称为网页游戏。 下面我们主要针对这类游戏架构与开发进行讨论。网页游戏可以看作是网站和游戏的结合

2、体,因此它具备了这两类系统的特性。 我们不但可以把网页游戏看作是一个网站,也可以把它看作是一个网络游戏。 网站是B/S结构,网络游戏则是C/S结构,网页游戏则是这两者的结合。,网站是B/S结构。 MVC思想:浏览器通过HTTP协议发送数据请求,由控制器接受请求,通过路径委托给数据模型处理,模型通过与逻辑层和持久层的交互,把处理结果反馈给控制器,控制器根据结果组装视图,并最终反馈给客户端浏览器。,网站服务器架构,控制器(Controller),视 图 (View),模 型 (Model),逻辑层和持久层,1.浏览器请求数据,返回浏览器,2.委托模型处理,3.提交集成模块处理,4.集成模块返回处理

3、,5.模型返回处理结果,6.准备视图,7.返回视图,网站服务器架构,Static Server、IM Server,客户端浏览器,网站服务器架构,网络游戏服务器架构,网络游戏一般采用C/S结构,客户端负责绘制游戏世界的实时画面,服务器端则负责响应所有客户端的连接请求和游戏逻辑处理,并控制所有客户端的画面绘制,客户端与服务器通过网络数据包交互完成每一步游戏逻辑。网关服务器方式,主要职责是将客户端通信和游戏服务器隔离。 网关服务器只负责解析数据包、加解密、超时处理、过滤错误包,客户端只需建立和网关服务器的连接即可进入游戏,无需与游戏服务器直接连接。网关服务器分为LoginGate(登录网关服务器)

4、、GameGate(游戏网关服务器)。,网络游戏服务器架构,1.LoginGate主要负责在玩家登录时维护客户端与LoginServer之间的网络连接与通讯,对 LoginServer和客户端的通信数据进行加密、校验。 2.LoginServer主要功能验证玩家账号是否合法,并生成一个登录凭证SESSIONKEY。 3.GameGate主要负责客户端与GameServer之间网络连接和通讯,对客户端请求和发送数据做简单分析。 4.GameServer主要负责游戏逻辑处理,包括战斗系统、任务系统、角色系统、地图系统等。 5.DBServer主要负责游戏数据缓存,包括玩家游戏属性数据,降低数据库压

5、力。 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

6、 Server所有区共用。,网页游戏服务器架构,用户通过浏览器访问服务器的时候,首先是访问网页服务器,通过网页服务器,再去访问游戏逻辑层,通知游戏逻辑层执行玩家操作,并从游戏逻辑层里获得游戏数据,或者直接通过访问数据库而获得游戏数据。,网页游戏服务器架构,网页服务器的特点是触发执行,及当有用户访问网页的时候,才会执行该网页的程序代码。而我们常见的WebGame实际上是需要24小时不间断执行的,因此网页服务器的执行方式并不适合做游戏。因此我们另外需要一个应用程序来执行这些24小时不间断要做的事情。 这也就是我们需要增加游戏服务器设计思路的原因。,网页游戏服务器架构,客户端浏览器,WEB服务器 (

7、逻辑运算层),CACHE数据层,公共数据库,玩家数据库,客户端浏览器,WEB服务器 (逻辑运算层),玩家数据库,战斗逻辑运算服务器群,服务端事件系统,什么是事件系统事件系统是整个WebGame系统里一个核心的组成部分,它控制着游戏的进程,使游戏能够及时执行到期命令。事件是指游戏里玩家的某个活动指令,它可以分为瞬时活动和非瞬时活动。瞬时活动顾名思义就是在玩家发出指令的瞬间就能完成的活动。 玩家从NPC里购买一瓶药水,在玩家发出这个指令后,玩家的金钱减少,药水增加1瓶,这一切都在玩家发出指令后瞬间完成。,而非瞬时活动则是在玩家发出某个指令后一段时间才会被执行。例如RPG游戏里玩家鼠标点击地图上某个

8、怪物进行攻击。这个攻击过程就是一个非瞬时过程,它有了一个战斗的过程,这个过程需要消耗一定的时间。 在WebGame里,玩家的很多操作可以看作时候瞬时事件和非瞬时事件的结合。例如在策略游戏里升级建筑物,瞬时事件是村庄资源减少,非瞬时事件是建筑物建设,非瞬时事件的结果是建筑物等级上升。比如策略游戏中的军队战争,瞬时事件是当前村庄的士兵减少,非瞬时事件是减少的士兵移动到需要攻击的村庄,结果是,两个村庄开打了。,服务端事件系统,事件队列 前面说了瞬时事件和非瞬时事件的概念,当WebGame24小时运行的时候,系统就会产生大量的非瞬时事件,通常把这些非瞬时事件统一拿出来,按事件的结束时间进行排序,并组成

9、一个队列(事件队列)。再通过一个触发器,在事件设定的结束时间到达的那一刻执行对应的事件。,服务端事件系统,实现方式 数据库 建立数据库内存表存放事件队列,通常会存在开始时间、结束时间、事件类型、事件参数等数据。PHP写一个FOR循环进程查询事件队列内存表,如果有到期时间的队列则进行处理并删除该条队列数据。 LINUX消息队列 通过LINUX消息队列存储游戏事件队列,PHP定时监听该消息队列中是否有待处理的事件队列,进行处理并删除该条队列数据。,服务端事件系统,数据库存储方式与内存存储方式对比: 游戏中的事件队列会比较多,体现在数量和类型上。各种各样的事件队列。 SLG游戏中:1.城池建造建筑。

10、2.城池间战争。3.城池造兵。4.研究科技。 RPG游戏中:1.战斗打怪或PK。2.连续打怪挂机。3.修炼挂机。4.技能修炼。,LINUX消息队列存储的优势在于降低了PHP进程对数据库查询压力,缺点是服务器宕机,内存中存储的消息事件队列将会丢失,RPG打怪事件队列丢失影响不大,只是当前打的这个怪物无效,但是其他类型的事件队列丢失话有可能影响巨大,还有查询到期事件的效率问题。,客户端玩家发起战斗事件指令,服务端PHP接收到该事件,进行战斗合法性验证后将该事件即相关运算数据存储到LINUX消息队列中,PHP战斗进程监听LINUX消息队列。 如果发现消息队列中有战斗事件: 1.PHP运算进程进行运算

11、。 2.PHP运算进程在运算完之后将运算结果写入玩家战斗结果DB内存表中存储,并将战报借助IM推送到客户端进行播放。(注:战斗结果是存DB中还是存入LINUX消息队列或MEMCACHE内存中?) 3.PHP战斗结束进程监听数据库中玩家战斗结果表,战斗结束时间到,则删除该条数据,并处理战斗奖励。 4.避免玩家重复发起战斗事件,可以在服务端通过玩家ID验证是否有正在战斗的战斗队列。(注:是否需要做服务端战斗状态验证?怎么做?查询检索?),RPG战斗进程,综上分析,服务端战斗相关进程会有两个以上,PHP监听战斗事件并运算进程,PHP监听战斗结束进程。 PHP处理战斗运算进程可以扩展出战斗运算分布式服

12、务器。,校对玩家机器和服务器端的时间 -防止客户端时间篡改 -更准确的完成事件交互 -客户端定时器长时间运行后和服务端时间会有时间差。,游戏时间校对,SLG网页游戏中常见的建筑建造倒计时、策略战争队伍行军倒计时。 RPG网页游戏中连续怪物攻击、挂机等功能。,网页游戏中常见的资源储备按小时产量时间递增功能。,数据库设计,对于任何项目,一个好的数据库设计极其重要,对于WEBGAME来说就更是重中之重了。一个好的数据库设计相当于一付好的骨架和脉络,当你的骨架搭建好,脉络理顺后,再进行游戏功能代码的时候将会非常顺畅。 怎么样才能设计好一款WEBGAME的数据库呢?,在设计前因做好如下准备: 1.对于游

13、戏业务逻辑要相当清晰。 2.多和游戏策划人员进行沟通,充分了解游戏功能需求。 3.发现游戏逻辑部分有矛盾时及时向策划人员反馈、调整。 4.对于游戏功能先按模块进行划分,然后再细化到每张表结构。 5.对于游戏逻辑复杂的功能点需要反复推敲。,数据库设计,开始设计数据库的时候因注意: 表名、字段名规范化,按游戏功能模块划分逻辑相近的表放在一起。 合理的区分游戏配置数据表和玩家数据表。 游戏配置数据表和游戏玩家数据表在表名上区分开,或则分库。 合理权衡表结构的逻辑关系、性能优、易理解、易扩展。 表字段类型长度设置合适,能用int就不要用varchar,能用mediumint就不要用int。 合理使用数据库表的纵切与横切来降低表压力。 合理规划表结构,常用字段和非常用字段,尽量在设计上避免关联查询。 一定要用INNODB事务表,游戏数据表中处处都是事务关联数据。 合理使用JSON格式进行数据存储。 数据冗余和性能权衡是个问题,比如用户昵称、职业等字段。 设计好表索引字段、用好联合索引。 在合适的功能上用好数据库内存表。 通过SQL来验证数据是否存在时一定要用COUNT(*)。 主从数据库用在游戏中会有数据延迟问题,不够实时。 合理的规划拆分数据库。,数据库设计,谢 谢!,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号