为什么javajava 桌面应用框架特别是游戏火不起来

粤嵌Java培训为什么会这么火热?原因就在这里……
自粤嵌Java培训班开班以来就一直呈现火爆状态,之所以会有那么多人来粤嵌参加培训,除了粤嵌本身资质实力打动学员外,还因为企业对Java人才的需求量紧缺。Java语言不仅具有使用价值,也能满足目前开发市场的许多需求。
很多关注粤嵌教育的朋友都知道,粤嵌不仅跟全国多所高校有众创空间的合作,还有许多企业来校招聘人才。小编跟各大企业的HR接触也比较多,虽然没有具体统计数据,但是大概从HR哪了解到,目前招聘Java人才的需求量确实比其他语言要多一些。Java这个行业一直被贴着高薪就业的标签,事实也是这样,小编不少从事Java开发的朋友都是月薪过万。Java语言入门并不难,不像嵌入式那样有门槛,但是师父领进门修行在个人,入门之后的学习进阶都要靠自己去努力。
Java行业持续至今都不曾降温的原因还有:现在可以说是智能手机的时代,人手一台智能机,这样使得Android和IOS越来越火热,Android作为全球最大的智能手机操作系统,最近几年发展非常快速,众所周知,Android应用的主要开发语言就是Java,可想而知,Java的用途不仅仅是Java开发,还有Android开发。不仅如此,Java在网站建设上也是功不可没,现在几乎每个企业都有自己的网站,很多政府网站、创业网站需求量也呈上升势头,作为网站建设第一大语言,Java首当其冲。在工作中我们每个人其实都要接触Java语言的,因为其在企业信息应用方面的应用非常多,比如OA、邮箱、股票、金融、考试、物流、医疗、矿山等信息方面的系统。在手机游戏中,java游戏开发是占优势的。Java本身就可以用来编写游戏脚本,这就是常说的J2ME技术了,因为它的可移植性和体积小,所以当前大部分手机都支持java游戏,国内游戏专业人才的需求一直存在缺口。
综合起来看,Java是一个大方向,工作内容也多有不同,这也是粤嵌Java培训为什么会这么火热的原因。工作细致认真负责,努力提升,相信你会在Java这个条路上越走越远。
声明:本文由入驻搜狐公众平台的作者撰写,除搜狐官方账号外,观点仅代表作者本人,不代表搜狐立场。
嵌入式物联网项目开发,真项目实操,开放式实战,企业化运作。
Android系统应用商业项目APP开发、HTML5交互式web前端开发。兄弟正式在51cto安家了~
cping 的BLOG
用户名:cping
文章数:228
评论数:184
访问量:655993
无忧币:18
注册日期:
Java桌面游戏开发
啊啊啊啊!一休大师降临了!我知道..
没有问题。捎带题一下,这个小程序..
感谢您对本文的关注,“等距坐标实..
That’s no problem
这部分我看了,是挺传统的延迟加载..
推(搬)箱子,又名Sokoban,仓库番等,是一款堪称古玩级的电脑游戏。
如果我们将游戏引擎和游戏数据理解为人与积木,那么脚本就是用来搭建积木的图样;如果我们将游戏引擎和游戏数据理解为海洋与大陆,那么脚本就是通行在海洋与大陆间传递资源的货轮。
老实说,延迟下载游戏资源及调用只是一种辅助手段,与游戏开发本身关系并不大,实质也无非只是文件下载及文件读取的混用。但考虑到上周有网友问及此类问题,笔者觉得与其回邮件单独解释,倒不如写篇博文看起来更具体清晰,还能令大家帮助笔者斧正刊误,故成此文,仅供参考。
在笔者的观念中,2.5D严格上说并不能算是一种技术,而只是一种实现方式或者说应用手段。大多数时候,游戏公司之所以会采取2.5D方式开发游戏,常是为解决3D及2D技术混用而采取的一种折中,而并不是说这种手段有多么先进。2.5D游戏的实现方式虽然很多,但主要无非有三类,即:2D角色+3D场景(比如RO1)、3D角色+2D场景(比如生化复刻版)、2D角色+2D场景(比如仙剑),另外有些纯3D游戏出于操作性考虑而固定视角,勉强擦了个2.5D的边,但严格上讲依旧是3D。
众所周知,Java应用的运行速度虽然不慢,却也谈不上快,以最新的JRE1.6表现来说,至多也就是优胜于一些纯粹的解释型语言,距离C/C++等编译型的执行效率还有一定差距。平心而论,如果我们使用Java去制作一些简单的桌面应用,那么目前Java组件的绘图速度勉强还能接受;但如果用Java来进行游戏开发,尤其是制作一些需要高FPS才能满足的动态效果,就必须利用技术手段对其加以优化,解决其绘图效率问题,其它才有的谈。
TLOH(英文名:The Legend of Heroes,中文名:英烈志),是笔者准备根据以前发布的loonframework-game包演示程序而修改制作的类《三国志曹操传》项目,此文为开发预告。
SLG或者说战棋游戏,在大多数英文站点是归类到Simulation Game的(包括模拟城市之类的纯SIM),并没有进行SRPG(Strategies Role Play Games)、RTS(Real-Time Strategy Game)乃至RSLG(Role play Simulation Game)种种的细分。归结原因,想必还是因为近似因素太多,在大多数时候已经难以区分其本来面貌,只能一概而论,所以本文也可以理解为SRPG或 RSLG开发的入门示例。
把最近发的部分示例代码打了压缩包,丢在了新建的code.google上,准备以后loonframework-game写示例程序就拿这些改了,还能对比一下代码优化及效率的提高,也方便各位看客下载。
作为Adventure Game,AVG的图文部分向来便是整个游戏的核心之一,所以本回将以图像绘制为中心讲解AVG的CG生成问题。(CG,即Computer Graphics,直译可称[计算机图形],此处以其为AVG开发中图形部分的代称)。
AVG,即Adventure Game,可以直译为[冒险游戏]。但是通常情况下我们说AVG是指[文字冒险游戏],也有人更直白的解释成自己选择路线和结局的电子小说,与硬砍硬杀的RPG或者揉破键盘的ACT不同,AVG多以解谜或文字游戏等脑力攻关推动剧情发展。
“本鹏”上接前文,继续来进行Java RPG开发讲座,上次我们谈到了JFrame和JPanel合作进行界面开发,这次我们再结合实例继续讲解。
在谈完Java中窗体和面板的使用后,接下来就要..
开场诗:不儒不道又不仙,非神非圣也非贤。轻吐心头寻常语,开辟文武一片天。自表诗:北冥沉渊有鲲鹏,吞噬金乌戮真龙。一日扶摇凌天起,三千世界可横行。
这是一个吃豆游戏的Java实现,具体代码较多请下载文件。下载地址:http://download.csdn.net/source/396925
在现代,摒弃传统的会话方式,很多的图形广告或游戏采用了[逐字打印]的效果来展示文字,当然,这样做的目的无非是为了突出内容或吸引眼球。但是这种实现方式却是值得借鉴的,以下,我给出一个JAVA实现的简单用例..
FPS:即帧 /秒(frames per
second)的缩写,也称为帧速率。是指1秒钟时间里刷新的图片的帧数,也可以理解为图形处理器每秒钟能够刷新几次。如果具体到手机上就是指每秒钟能够
播放(或者录制)多少格画面..
效果图如下:源码如下:package org./** * &p&Title: LoonFramework&/p& * &p&Description:拼图图像处理[未优化]&/p& * &p&Copyright: Copyright (c) 2007&/p& * &p..
下载地址:[url]http://download.csdn.net/source/586635[/url] 这是一个简单的Java仿雷电游戏(源码见包内),共设置有三关三个小BOSS。采用有GreenJVM发布,因此可以运行在未装载JRE的Windows系统之上。 ..
说到SLG游戏开发,无论其如何运转,里面都离不开各种数据的处理,一般来说,游戏越专业,需要处理的数据量将相对越大,类别也分得越细。
游戏离不开美工,也离不开策划,各项参数的专业划分同样..
什么是SLG呢?也就是Simulation Game的缩写,即模拟策略游戏。
以我这种准骨灰级玩家的视点来看(鄙人88年开始玩FC,时年6岁),早期的SLG游戏,大体只是《三国志》(I由1985年开始发售)这类发布指令扩充
..
源码较长,请自行下载,已打包入jar中。
下载地址:[url]http://download.csdn.net/source/501281[/url]
此示例根据日本Hudson公司推出的炸弹人游戏改编而成,采用Java实现,运行于pc平台下。需要声明一点..Java游戏跨平台利是弊?
滚动新闻&&
<font color='#/07 14:56  
<font color='#/07 14:56  
<font color='#/07 14:55  
<font color='#/07 14:53  
<font color='#/07 14:51  
<font color='#/07 14:51  
Java游戏跨平台利是弊?
  日 14:01:19  来源:
&&&&Java语言最大的一个特点就是他的跨平台特性,也就是平时广告语中说得最多的“write once run anywhere”。跨平台最明显的一个优点就是,你写的程序地球人都能运行,这对程序员来说就是减少了工作量,对于公司来说就是减少了投入。但是,天底下没有免费的午餐,跨平台是需要有代价的,最明显的一个就是我们的代码将会被编译为所谓的“字节码”,这些代码在运行时由虚拟机进行解释执行,正是因为这种解释执行的方式导致了Java程序的执行速度一直不如其他的C和C++程序。 &&&&虽然,跨平台特性是如此优秀,但是很多时候,我们是否真正考虑过我们是否需要这种特性呢,或者这种特性对我们来说是利大还是弊大呢。 &&&&在国外,版权是一个很严重的问题,因此,在国外虽然Windows系统占有比较大的市场,但是在大学,在政府部门,在程序员当中,大量使用的是类Unix和Linux的操作系统,只要对Unix操作系统稍有了解,就会知道Unix系统发展到今天,已经出现了好几个不同的发行版本,这些版本虽然没有大的区别,但是还是存在着或多或少的不兼容,因此,一个程序如果需要在不同的平台间运行,那么移植将是必不可少的。因此,对于国外的桌面系统环境,Java程序的跨平台性显然比他的性能因素更重要。但是,反观国内,占据市场主导的都是Windows系统,而程序员所开发的程序也基本上是运行于该平台下,很少需要考虑程序移植的问题。因此,一个程序是否能跨平台运行,对于我们来说不如国外强烈,所以,从我们的现实情况出发,性能比跨平台显然更为重要。但是,从长远来说,如果我们希望我们自己写的程序能够冲出亚洲,走向世界,那么跨平台性显然也是一种很有利的特性。 &&&&除了桌面应用以外,Java程序还主要运行于服务器端和嵌入式终端,对于服务器端,我觉得没必要多加评论,因为与桌面应用的PC不同,服务器端应用所依赖的硬件平台尚未呈现一个一家独大的情况,因此跨平台性是非常重要的,而且现有的应用也表明J2EE平台已经成为了事实的标准,因此,不管他合适与否,我们也只能继续使用。
(责任编辑:宁波)
相关新闻/图片:
发表评论:
遵守国家有关法律、法规,尊重网上道德,承担一切因您的行为而直接或间接引起的法律责任。
新华网拥有管理笔名和留言的一切权利。
 频道精选
新华网版权与免责声明:
凡本网注明“来源:新华网”的所有作品,版权均属于新华社,未经本网授权不得转载、摘编或利用其它方式使用上述作品。已经本网授权使用作品的,应在授权范围内使用,并注明“来源:新华网”。违反上述声明者,本网将追究其相关法律责任。
凡本网注明“来源:XXX(非新华网)”的作品,均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。
如因作品内容、版权和其它问题需要同本网联系的,请在30日内进行。
联系方式:新华网管理协调部 电话:010--
华 网 检 索2.游戏界面设计的需求分析:;作为一个游戏吸引玩家的重要方面,游戏的界面要很漂;2.1.3系统的可靠性和可用性需求分析;可靠性需求定量地指定系统的可靠性;可用性则与可靠性密切相关,它量化了用户可以使用系;2.2数据流分析;数据流程分析主要包括对信息的流动、传递、处理、存;图2-1系统数据流程图;3总体设计;总体设计过程通常由两个主要阶段组成:系统设计阶段;3
2.游戏界面设计的需求分析:
作为一个游戏吸引玩家的重要方面,游戏的界面要很漂亮,图形动画的设计是非常必要的。本作将采用模拟动画的方式将战争展现在玩家眼前。设计出丰富的战争环境,游戏中为了美观,适用性强,需要采用外部文件引入的图片贴图,而Java中提供了用于处理图片的功能包,使得解决静态或动态、画面背景、屏幕刷新的双缓冲等都有较好的解决方案。
系统的可靠性和可用性需求分析
可靠性需求定量地指定系统的可靠性。例如,游戏在运行过程中不能频繁发生错误而不得不终止游戏。
可用性则与可靠性密切相关,它量化了用户可以使用系统的程度。例如,游戏的运行必须保证随时可以,不能在一段不使用的时间内,游戏产生不可预见的错误而致无法运行等等。
数据流分析
数据流程分析主要包括对信息的流动、传递、处理、存储等的分析。数据流程分析的目的就是要发现和解决数据流通中的问题。通过对本系统的需求分析,确定了系统的基本功能。整个系统的数据流图如图2-1所示:
图2-1 系统数据流程图
3 总体设计
总体设计过程通常由两个主要阶段组成:系统设计阶段,确定系统的具体实现方案;结构设计阶段,确定软件结构和功能模块。
3.1.1 系统开发的原则
经过需求分析阶段的工作,系统必须“做什么”已经清楚了,现在是决定“怎么做”的时候了。总体设计的基本目的就是回答“概括地说,系统应该如何实现?”这个问题,因此,总体设计又称为概要设计或初步设计。通过这个阶段的工作将划分出组成系统的物理元素――程序、文件、数据库、人工过程和文档等等,但是每个物理元素仍然处于黑盒子级,这些黑盒子里的具体内容将在以后仔细设计。总体设计阶段的另一项重要任务是设计软件的结构,也就是要确定系统中每个程序是由哪些模块组成的,以及这些模块相互间的关系。
总体设计过程首先寻找实现目标系统的各种不同的方案,需求分析阶段得到的数据流图是设想各种可能方案的基础。然后从这些供选择的方案中选取若干合理的方案,为每个合理的方案都准备一份系统流程图,列出组成系统的所有物理元素,进行成本/效益分析,并且指定实现此方案的进度计划。通常,设计出初步的软件结构后还要多方改进,从而得到更合理的结构,进行必要的数据库设计,确定测试要求并且制定测试计划。
基于上面的叙述,在详细设计之前先进行总体设计的必要性:可以站在全局高度上,花较少成本,从较抽象的层次上分析比对多种可能的系统方案和软件结构,从中选出最佳方案和最合理的软件结构,从而用较低成本开发出较高质量的软件系统。
3.1.2 系统设计阶段
系统设计阶段的主要目的就是确定软件如何做的问题。主要任务就是确定系统中的大模块和设计方法,确定软件的功能模块和模块的作用,组成,关系等等。
本系统是一款希望可以基于网络的多人对战游戏,当游戏者打开游戏,游戏界面打开,然后玩家可以选择是进行一轮新的游戏,还是选择接着玩上次没玩结束的游戏(如果先前已经玩过该游戏,但没有玩结束,有事了,并且保存了),只需要选择载入游戏就可以;玩家还可以选择是进行单机游戏或是联机游戏,如果选择网络联机玩的话只需要启动服务器等待其他玩家加入就可以了;如果选择了单机游戏,并选择了进行一轮新的游戏,则游戏会出现游戏设置界面,通过该界面玩家可以设置游戏的玩家数量(2-6个)以及游戏的难度,电脑玩家有简单智力的和高智力的,然后玩家可以选择不同的卡片模式和不同的游戏模式(分为统治型、首都型和任务型),并且玩家可以选择不同的游戏地图,游戏的目标是统治全世界,当玩家设置好一切后,可以点击开始游戏,则游戏开始。
游戏开始,游戏画面是一张被分割成多个国家的地图,每个玩家可以轮流在地图上选择自己的地盘和军队的布置,而电脑玩家也会自动放置军队,当每个国家都被放上军队后,才可以重复在一个国家放置多余的军队,当默认的所有军队全都放置好,然后玩家就可以开始统一全球的战争游戏了,而当一方的军队侵略另一边时,游戏程序通过一定的人工智
能算法让战争的双方分别产生随机数,然后进行比较,大的一方胜利,而当进攻者与防守者产生的数字一样大时,算是进攻失败,如果进攻胜利,则胜者将占领该国家,并可以选择留守该国家的军队数,而等到下一轮到该玩家进攻时,可以根据该玩家在占领的领土来决定你可以增加多少军队,以及你可以获得的卡片,获得的卡片可以用来交换军队,最后占领全世界(消灭了其他两个玩家)的为胜利者。在游戏过程中如果玩家突然有事无法继续游戏,本游戏可以保存当前游戏状态,当玩家有时间时可以接下去游戏,而无需重新开始,玩家也可以将自己的机器作为服务器,通过网络与网络上的其他玩家一起游戏。本游戏还具有统计的功能,在你游戏过程中或则游戏结束后你可以查看在本局游戏中各个玩家各个方面的战绩的统计(例如每个玩家在游戏过程当中所占领的国家数、军队数、摧毁数、伤亡数、受到进攻的次数等等),游戏中还设置了控制台,玩家可以通过图形显示的按钮进行游戏,也可以通过命令来进行游戏,在游戏菜单栏的帮助中,玩家可以选择命令按扭来显示出游戏中可用的命令菜单,玩家可以通过选择其中的关于了解本游戏的一些信息。 当你赢的了游戏,游戏会告诉你,你胜利了!
关于线程:对象技术提供了一种把程序划分成若干独立部分的方式。通常,还需要把程序转换成彼此分离的、能独立运行的子任务。每一个这样的独立子任务都被称为一个“线程”。每个线程都好象是在独立运行并且有自己的CPU。CPU时间确实是通过某些底层机制进行分配的,不过你一般不考虑这些,这使得编写多线程程序的任务变得容易得多了。多线程有多种用途,不过通常用法是,程序中的某个部分与一个特定的事件或资源联系在一起,而又不想让这种联系阻碍程序其余部分的运行。这时候,可以创建一个与这个事件或者资源相关联的线程,并且让此线程独立于主程序运行。使用并发的最引人瞩目的理由之一就是,产生一个可作出响应的用户界面。考虑一个程序,它要执行某项强烈需用CPU的计算,这样就会导致用户的输入被忽略,也就无法作出响应。问题的实质是:程序需要一边连续进行计算,同时还要把控制权交给用户界面,这样程序才能响应用户的操作。
并发还可以用来优化吞吐量。比如,在等待数据到达输入/输出端口的同时,可以进行其他重要的工作。要是不用线程的话,唯一可行的办法就是不断查询输入/输出端口,这种方法不仅笨拙,而且很困难。
线程模型为编程带来了便利,它简化了在单一程序中同时交织在一起的多个操作的处理。在使用线程时,CPU将轮流给每个线程分配其占用时间。每个线程都觉得自己在一直占用CPU ,但事实上CPU时间是划分成片段分配给了所有线程。例外情况是程序运行在具多个CPU的机器上,但线程的一大好处是可以使你从这个层次抽身出来,即代码不必知道它是运行在具有一个还是多个CPU的机器上。所以线程是一种透明的、可扩展的程序方法,如果程序运行的太慢,为机器增添一个CPU就能很容易地加快程序的运行速度。多任务和多线程往往是使用多处理器系统的最合理方式。
游戏中将在很多地方用到多线程,像在进行网络联机时将会使用多线程来是两个玩家可以同步进行游戏,而图形界面也通过多线程同时进行多的程序的进行。
3.1.3 结构设计阶段
经过系统设计阶段的思考和实践,需要对功能结构进行细致的划分。一个程序的结构设计的好坏也是决定其发展的重要指标。对一个程序的模块划分往往也能使程序设计变得简单。
本游戏的模块大致分为游戏引擎和用户界面两大模块而,游戏引擎模块又分为核心包、ai包、网络包、本地翻译包、游戏控制类等等,其功能模块图示如下:
功能模块介绍:
&1& 图3-1 系统功能模块结构图 king.engine.core包:其中包括了一些基本核心的类,例如像表示一个国家的Country类,表示一个卡片的Card类,表示一个版块的Continent类,表示一个玩家的Player类以及表示一个任务的Mission类等等。
king.engine.ai包:其中包括了玩家可选择的简单人工智能的电脑玩家和复king.engine.translation包:其中包括了用于将游戏中的语言根据计算机所king.engine.net包:其中包括了将游戏用于网络联机玩用到的类。 杂人工智能的电脑玩家以及不同游戏类型的不同玩家的人工智能。 处的不同的国家翻译成不同的语言的类。 &5& 游戏控制模块:主要包含一些我自己定义的一些接口和过滤器类等工具类。
系统用例图见下页:
图3-2 系统用例图
游戏设置用例图:
图3-3 游戏设置用例图
三亿文库包含各类专业文献、文学作品欣赏、高等教育、应用写作文书、生活休闲娱乐、外语学习资料、行业资料、中学教育、各类资格考试、专业论文、Java桌面游戏开发毕业论文(含源文件)_图文45等内容。 
 Java 在线考试系统毕业设计说明书(含源文件) 毕业设计论文 毕业设计(论文)原创性声明和使用授权说明 原创性声明 本人郑重承诺:所呈交的毕业设计(论文) ,是我个人...  毕业论文基于Visual_Basic图书管理系统毕业设计论文(含源文件)_其它_工作范文_应用文书。摘要 图书管理系统是典型的信息管理系统(MIS),其开发主要包括后台数据库的 建...  基于JAVA的学生学籍管理系统毕业设计(含源文件)_管理...(设计)评语及成绩论文类型:软件开发型 评语: 指导...(而不使用静态图片)来显示数据,这些图表易于 刷新,...  基于JSP会议管理系统设计(含源文件)―毕业设计论文_理学_高等教育_教育专区。一 绪论 1.1 本课题的开发背景及意义 当今社会竞争日益激烈,企事业单位内部会议也不...  计算机毕业设计_基于Java桌面游戏―争霸的设计与实现_工学_高等教育_教育专区。毕业设计(论文)中文摘要 Java 桌面游戏―争霸的设计与实现 摘要:随着计算机日益普及,计...  java学生信息管理系统课程设计(含源文件)_管理学_...本论文,简要阐述了系统的开发背景与开发环境,对系统...毕业生信息管理、更多 信息管理(补助信息管理、勤工...  小区物业管理系统设计毕业设计(含源文件)_工学_高等...安排我们到项 目开发单位调研,都给予了精心的指导及...这个设计和论文的完成,凝结着 刘忠利老师和刘健老师...  毕业论文基于VB人事管理系统设计(含源文件)_其它_工作范文_应用文书 暂无评价|0人阅读|0次下载 毕业论文基于VB人事管理系统设计(含源文件)_其它_工作范文_应用...  JSP设计一个旅游网站毕业设计(含源文件)_工学_高等...因此我这次选了哪里好玩旅游网设计作为我毕业论文的...(二)开发技术 1.JSP 简介 JSP(Java Server Pages...Java在游戏服务器开发中的应用
发表于 15:55|
作者王广帅
摘要:随着游戏市场的兴起,特别是网页游戏、手机游戏的崛起,对游戏开发技术的需求越来越多。触云游戏公司选择使用Java做服务器开发语言,一起来看下Java在触云游戏服务器开发中的应用。
随着游戏市场的兴起,特别是网页游戏、手机游戏的崛起,对游戏开发技术的需求越来越多。网络游戏开发是一个庞大的体系,总体来说是客户端与服务器端。客户端是玩家接触的游戏图像显示端,服务器是处理游戏运行中的各种数据,由于一台服务器要支持众多玩家的请求,所以服务器的性能高低决定了同一个游戏的用户数量。我们公司选择使用Java做服务器开发语言,主要原因是:1.Java是跨平台的,方便部署;2.Java是安全的高级语言,可以提高开发效率;3.Java是面向对象的,代码可以重用;4.Java的分布式应用。图1 服务器架构图服务器架构Java在我们的服务器开发中的应用。服务器架构如图1所示。服务器架构的几个模块:登录服务器逻辑服务器用户中心服务器充值服务器数据库服务器日志服务器这些模块都是分开的,可以灵活地分布式部署到不同的物理服务器上。只需要修改一些配置文件即可,非常方便。服务器详细功能模块登录服务器负责处理玩家登录的请求。一个登录服务器对应多个游戏逻辑分区。当玩家登录的时候,登录服务器向用户中心服务器发送登录信息。请求对登录信息的验证。通过验证之后,返回分区地址,之后,客户端与登录服务器断开,连接到游戏逻辑服务器。登录服务器是一个单独的Java运行程序,当访问量增加大,可以增加部署到多个物理服务器上面,均衡负载访问压力。它通过使用Java的NIO(非阻塞)方式与客户端进行通信。通过用户中心服务器提供的接口访问用户中心,进行数据处理。逻辑服务器对玩家的操作进行逻辑处理。逻辑服务器是整个游戏的心脏。它的工作效率直接影响玩家在游戏中的体验,所以对它的要求就是速度,快速返回处理结果。为了达到满足要求的速度,逻辑服务器的大部分操作必须在内存中操作,避免I/O操作,I/O操作可以放到另外的线程中进行。说是大部分,是因为玩家在第一次登录的时候可能会从数据库加载所要用到的数据。在图中,大家看到了缓存,缓存的作用就是把数据放在内存中。当玩家退出时,它的数据也会在缓存中保存一段时间,在一定时间内,玩家再次登录,将不会再重新从数据库加载数据。在逻辑服务器中对数据库的操作可以先放入一个Java队列中,再另起一个Java线程负责从这个队列取数据,并发送到数据库服务器,这就是使用Java的阻塞队列,快速实现一个生产者—消费者模式,数据生产与处理相分离,这样既减轻了逻辑服务器的压力,也保证了数据处理的效率。逻辑服务器的日志也不在逻辑服务器入库,同样的发送到日志服务器处理。还有一种方法是以一种特定格式的方式,记录到本地文件中,再启动一个进程,读取这个文件,然后入库。用户中心服务器现在很多游戏都对用户进行了集中管理。这方便了对用户提供更好的服务,比如充值、活动、礼包领取、新游戏导入用户等。有的游戏公司可能会用用户中心的数据发展游戏运营平台。这部分与游戏逻辑服务器分开,也减少了游戏逻辑服务器的压力。用户中心采用JavaWeb开发,它对游戏服务器只提供特定访问的接口,把数据与逻辑分离开来,方便管理,以及分布式部署,增强了架构的灵活性。充值服务器充值是游戏收入的唯一方式,所以这个功能必须流畅,毫无压力。如果由于网络或服务器性能原因,导致玩家充值不了,会直接影响收益的。所以充值服务器最好部署在一台单独的物理机上面,也可以多个分区使用一个充值服务器,这要视游戏人数而定。数据库服务器负责对数据入库及更新的操作。把这部分操作从逻辑服务器分离出来,就是为了减轻逻辑服务器的压力,减少逻辑服务器资源的占用。而且,如果逻辑服务器突然宕机的话,也能尽量保证数据少丢失。为了保证对数据的更新是顺序性的,这里把数据入库的操作使用队列单线程化。逻辑服务器与数据库服务器通过Java的TCP/IPSocket进行长连接,而且为了防止由于意外原因导致连接中断,在逻辑服务器与数据库服务器之间加入了一个心跳连接,这样短暂的中断可以被很快恢复,防止数据的丢失。日志服务器处理玩家日志的入库。日志入库方便游戏运营管理游戏,统计玩家信息。当玩家人数比较多的时候,日志也会占用很多资源。所以把日志从逻辑服务器也分开了,因为日志只是插入操作,所以可以开几个线程进行并发插入到数据库。线程数要根据你数据库的连接池的最大连接数进行设置,要不然会导致连接资源被占完,数据插入不了数据库。注意事项在游戏服务器开发中,有几个需要注意的问题。通信协议开始的时候,我们为了快速开发,采用了JSON的变长协议处理方式,即把要传送的数据编码成json的字符串,再把json字符串转化为字节数据,传输过程中包的总结构为:总包长度(int四个字节)+消息长度(int四个字节)+消息体,即数据长度,n个字节。这样做的好处是可以快速开发,缺点是在传输过程中无效的字节太多。而且这部分完全可以用代码自动完成。后来我们采用Java的反射机制,从定义好的xml描述协议文件中读取传输的内容格式,自动化生成传输的对象,在发送信息时,根据这个对象再把数据转化为二进制的数据流,解析的时候,同样也根据xml的描述文件,按顺序读取数据并转化为对象的JavaBean对象。如果时间充足,在游戏开发前期应该把这个做好。多线程并发游戏服务器是一个多用户的环境,其中多线程是必不可少的,它可以提交程序对CPU的利用率,提高处理性能。但它也有一个致命的缺点,就是在多线程下,数据同步的问题。因为在目前多核CPU下,线程算得上是可以并行执行的了。比如竞技场中的排行榜,每个玩家的名次变化都会对排行榜进行操作。如果不考虑数据同步的话,每个玩家可以随意更新排行榜,那这个排行榜的数据就会非常乱,名次也不正确。这个时间就需要保证在一个玩家更新排行的时候,其他玩家不能更新,只能阻塞等待。一般有两种方法可以解决:1.直接使用锁,当一个玩家更新排行榜时,使用锁锁定排行榜集合,让其他玩家不能再对排行榜操作,Java有自带的两种方式,非常方便,一个是Lock接口,一个是Synchronized;2.使用乐观同步,这种方式需要自己额外实现,之所以说是乐观,是因为它有可能执行失败。原理是当我取数据时,获得一个数据的一个版本号,而当写入数据时,如果版本一致,可写入,如果版本不一致,就需要重新获取数据,执行逻辑,直到版本一致后写入。可以设定重复次数,达到这个次数后,还没有成功就判定失败。根据我们目前的运行环境,我们采用了第一种方式。
均衡负载一台物理服务器的处理能力是有限的,对于可能支持数据众多的游戏服务器来说,分布式部署和动态添加服务器是不可缺少的。在逻辑上,可以把需要集中处理,与逻辑运算关系不大的模块单独部署。比如登录服务器、地图服务器、聊天服务器、数据库服务器等。像我们把登录服务器和数据库服务器分离开就是为了减少逻辑服务器的压力。缓存的设计起初,为了快速敏捷开发,我们采用了一级缓存方式,即图1中的Redis缓存,它是一个分布式的缓存,内部通过Socket连接。在玩家第一次进入游戏的时候会把玩家数据从数据库加载到Redis缓存之中,再取数据只从缓存中取。后来为了更加提高处理速度,增加了二级缓存,即内存缓存,利用Java提供的Map、List等集合保存数据,开发了一个基于内存的缓存构架MemoryCacheTool,对外只提供操作接口。由于是直接从内存中读取或写入数据,其速度相对于Redis提高大约20%左右。总结Java是一门安全、高效、跨平台的语言,它在游戏服务器开发过程中可以提高开发效率,减少异常,增强程序的健壮性。它很容易实现各个功能的衔接,方便后期的维护。
王广帅作者简介:王广帅,网名wgslucky,2011年毕业开始参加工作,一直从事于游戏服务器的开发工作。现任北京触云科技有限公司服务器端技术主程,是一名技术狂,热爱读书,喜欢挑战,热衷与技术同道分享交流游戏开发方面的技术。本文选自程序员电子版2015年5月B刊,该期更多文章请查看。2000年创刊至今所有文章目录请查看。欢迎(含iPad版、Android版、PDF版)。
推荐阅读相关主题:
CSDN官方微信
扫描二维码,向CSDN吐槽
微信号:CSDNnews
相关热门文章

我要回帖

更多关于 java 桌面应用框架 的文章

 

随机推荐