很多人以为WEB游戏的样子就类似开心网,很简单,主要是大家互动.但其实不是这样的.
开心网的WEB游戏比如种菜,大家觉得画面很精美,其实主要是前段采用了FLASH作为页面的展示,而FLASH有优势也有劣势.画面精良,与服务端数据通讯少(只需要提供必要的数据就可以了)是他的强项.当然他也有很大的缺陷,那就是第一次加载SWF文件很慢.不过因为开心网的这个SWF游戏本身比较小,所以并不能体现出他的劣势,这可能只有开心网这个平台才可以这么做,而很多网页游戏(FALSH版本)光下载SWF(第一次)就需要几M的容量,加上后续还需要下载地图…这不得不感叹有客户端游戏的极大优势啊…
我们的游戏没有采用FALSH方式,当然也有团队对FLASH的SOCKET通讯方式不熟悉,也有FALSH下载量太大导致服务器流量与并发量吃紧有关.我们采用的是javascript.用了很多扩展包,比如propotype,dwr(ajax),以及JS的特效包.页面采用的是WEB2.0(CSS+DIV)方式.其实效果也是很好的.这里不得不说一下DWR了.速度快,只刷新局部页面是他的最大优势.普通的WEB请求需要请求图片,js,html等等,花费的请求时间与数据下载量巨大.一个JS小的到50毫秒,大的到500毫秒不等.而不起眼的小图片,竟然也会吞噬你20毫秒的时间,而这些请求一累计,请求时间花费无数…这个时候DWR就发挥出他的威力了,他只有一个请求(只有一个!)在这个游戏里最大的数据库消耗功能(排名统计)也仅仅用了800毫秒,而这个功能竟然包括了数据库的一张表(几万数据量)的 1select,2count,3where 等3次查询,性能之高可想而知.
这里大家可以看出来,WEB游戏除了画面之外,重要的是什么?性能.基本上我们游戏5万个会员,在线人数保持在500人左右(并发量).这可不同于普通网站的在线人数哦.因为普通网站一般访问一下要过好久然后再次请求,没有狂刷页面的.而游戏是实时互动的.一个用户可能一秒就要来一个请求,服务器的压力之大可想而知…有人说,加大服务器配置嘛,这句有点偏颇.其实是,要先从软件的角度优化性能.比如不必要的数据库查询(大约占性能的30%),比需要的网络请求下载(30%),数据的缓存(20%)以及其他的一些优化.需要综合…这样的结果就是,我们用3台服务器(1个MYSQL,2台应用)撑起了整个游戏环境(应用服务器还是TOMCAT集群的哦!)
开服只1个月,数据库量大到什么程度?一张表竟然有100万条记录了…这时候怎么办呢?目前比较好的想法是用年月的方式作为表的名称,但这个就与hibernate的动态映射有关了,网上搜了一下有这个技术,但目前还没用.只能用定时删除历史的方式来实现了..呵呵
做游戏,重要的是你要时刻考虑:性能,游戏的效率,游戏的可玩性.如果你觉得这个功能好玩,就要吧他做到最好,既好玩,又速度快,又要让玩家有刺激感…很复杂啊..
第一部分先写到这里吧,能写的太多了,这里只是一小部分.呵呵
web游戏,感觉用flash还是比用JS要好嘛,游戏最重要的东西就是很炫的效果,和良好的交互,JS目前还无法满足这种需求,当然也许在几年后,有google 的 chrome环境也行能够做到,但是至少现在的几年看不到希望!!
flash如果在客户端做缓存,也不是必须每次都要下载,比如1M flash如果把大量的组件缓存在客户端,就只有第1次下载慢了,以后打开基本就在3-4S之内。
flash对socket的支持,那是相当的好,JS就无能为力。
不过好像很多的网页游戏都是用js做的,而不用flash,不知道是为什么。
空下来了回复一下。
FLASH编程的人员不好招,没有像JS的程序员那样广泛。
主要是FLASH的语法,不过现在AS3的语法大量也使用了面向对象的设计思想。
主要是加入了事件监听,但是对用惯了.NET和JAVA的开发人员上手不容易,所以现在不是出了FLEX,用XML和JAVA的语法实现FLASH功能,效果也很不错呢。
我写了个FLASH抽奖转盘,学了一下FLASH的语法,发觉与spring的集成还是比较容易的,不是SOCKET通讯,用的HTTP,采用二进制流的传输方式,效率比较高,性能也较好。看来ADOBE的前景还是比较辉煌的。
希望以后用标准的html+css+javascript就可以做到flash那样的效果,那样最好了。唉,很多科班出生的程序员,觉得搞php flash没技术,而非科班出身的程序员就算学了php flash等,又很难有太多的深入,就是这么悲哀。我一点也不对php flash javascript等平时被人称作没有“技术含量”的语言抱有偏见。如果需要,我以后也会学习的,而且很乐意学。
哈哈,哪种语言都有用,深入每种语言都有乐趣的也。。。