热门课程:
- 学校新闻
-
基于js + xml + ajax的网页互动娱乐游戏
一直都认为,web程序是不适合用来做交互的,但是由于浏览器的便捷与庞大的用户群,越来越多的人看到了这里的潜在价值,于是*近,webgame如雨后春笋般冒出来了。
一、什么是网页互动游戏?
互动游戏跟一般的网页游戏不同,一般的网页游戏其实是人机游戏,当然也有人跟人玩的,但是一般都不是实时的,而且游戏双方可能相隔的时间比较长。互动游戏的区别就是在于他需要游戏双方(甚至多方)同时在线,并实时获取他人的状态。
二、技术要求
既然互动游戏需要实时更新游戏双方的状态,那么翻译成技术语言就是:客户端需要不断地去请求服务器获得游戏双方的状态信息。那试想如果有一个网站的用 户,以前他的频率是每30秒有一次动作(即服务器请求,以本人为例,30秒肯定是没这么频繁的,哈),那么他在玩互动游戏的时候以每秒获取状态为准,即服 务器请求次数整整高了30倍。这个是本人不能接受的,也是我认为web程序不适合做交互的原因!有人会说,可以使用ajax。对,使用ajax是可以省去 一些多余的信息处理,但依然是一次服务器请求,依然是一个php进程,依然要消耗一个mysql 进程。
三、我采用的结构是: 基于 js + xml + ajax
看到这个也许有人会想笑,说ajax(Asynchronous JavaScript and XML “异步JavaScript和XML”)不就是包括js+xml的吗,干嘛还要把这两个给拎出来?
其实我这里的 js+xml 并不是ajax里的那两个,我这里所讲的js+xml其实是构建网页内容的基础工具,即:
1、html布局 - 先用html元素搭好一个页面框架
2、不断地用js加载xml文档(频率基本是每秒载一次,xml里的信息为所有用户资料以及游戏的状态),分析xml的数据并组织相应内容添加到框架中,即做到实时更新页面的效果
3、当有用户动作或游戏状态发生改变时,使用ajax操作,并更新xml中的内容
当然这种结构到底能不能提升性能,能提高多少性能,都没有经过测试。但是从理论上讲,每秒加载一个xml,大小不过几百字节到几k,以用户动作30秒频 率为准,也就相当于刷新一个页面,里面有20-30个小图片而已,这个至少是我能接受的。至于详细的耐压结果,还有待实践检验。
四、同步请求与进程锁
玩过游戏的人都知道,当你不想玩的时候,总是需要退出游戏。不过浏览器可不行,人家随便打个网址,或者关闭浏览器、甚至电脑,就不见了,那作为另一头的你,是不是还需要等待对方响应呢。
这个就需要用到同步请求机制,即当用户没有在规定时间内作出反映时,所有玩家同时请求服务器改变游戏状态。以斗地主为例,如果一个玩家在40秒内没有出 牌,那么所有玩家都会触发请求服务器,使得游戏状态改变,轮到下一家出牌,以*就算只剩一个玩家也可以让游戏进行到结束。
那什么是进程锁?这个是本人在开发过程中遇到一个问题,就是同步请求带来的问题。还是以斗地主为例,有一个操作是更新游戏状态、让下一家出牌,但是同步 请求过来的3个进程,由于php的并发机制,全都执行了,那么游戏状态更新多次,一下家没出牌就pass了。还好pw7自带的进程锁机制(同一时间相同进 程只有一个执行,其他忽略,有兴趣的同学,可以研究一下),不然要费一翻周折。