深度解析Java游戏服务器开发(txt+pdf+epub+mobi电子书下载)


发布时间:2020-08-31 14:51:32

点击下载

作者:何金成

出版社:电子工业出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

深度解析Java游戏服务器开发

深度解析Java游戏服务器开发试读:

内容简介

为了帮助想了解入门游戏服务器开发的从业人员或非从业人员迅速掌握Java游戏服务器开发的技术,本书从游戏的行业分析、Java技术、游戏逻辑、数据库技术、网络理论、服务器技术、架构分析、系统优化等方面对游戏服务器开发做了全面解析,并对目前市面较热门的游戏进行分析,从行业到理论到技术,再到架构到实战。本书带领读者熟悉Java游戏服务器开发相关领域,帮助想要入门游戏服务器领域的读者更快地了解并掌握相关内容。

本书实用性强,既是非游戏行业人员迅速了解并掌握游戏服务器技术的宝典,又是游戏行业从业人员进阶提升的实用手册。

本书适合作为非游戏行业但想入门游戏行业的Java工程师、想了解游戏服务端技术的游戏前端工程师、需要游戏服务器开发入门工具书的人员,以及其他对游戏服务器开发有兴趣爱好的各类人员的阅读书籍。前言PREFACE

Java诞生于20世纪90年代,是一款面向对象的工具,为企业级的计算领域提供解决方案。目前,Java普遍应用于分布式开发及大数据云计算领域,无论是大家手中的安卓手机,还是企业级CS、BS项目,以及微信公众号和APP后台开发,处处可见Java的身影,而本书将重点介绍Java在游戏服务器开发领域的应用。本书特色

本书将讲解在游戏开发领域,如何使用Java开发游戏服务器。本书附有丰富的源码案例,并对目前较热门的网络游戏服务器进行分析。

市面上大部分讲解Java的书都以Java基础、JavaEE企业级开发、Android开发、微信开发等为主,本书将重点讲解Java在游戏领域的应用——Java作为游戏服务器开发的卓越表现。虽然,服务器领域一直由C++主导,C++优秀的性能在服务器中有着良好的表现,但近些年来,Java也变得越来越优秀,Java在网络方面的处理性能也有了显著提升,使用Java开发游戏服务器也成为可能。本书为使用Java开发游戏服务器提供指导,让有Java基础的读者快速入门Java游戏服务器开发。

本书对游戏服务器开发的各种技术都做了详细介绍,并且源码中有相应的案例,代码中也有非常详细的注释。对于不容易理解的内容,结合图表进行讲解,使读者可以有一个更加直观的认识。

书中涉及的均是目前使用较广泛、较热门、较实用的技术,想要了解新技术的人可以把本书作为参考。本书优势

虽然目前也有少量关于游戏服务器的书讲解得非常细致,但大多是基于C++语言实现的服务端内容,而使用Java开发游戏服务器的开发商越来越多,本书针对的就是有一定Java基础的人,每章均配有源码案例,可带领读者快速入门Java游戏服务器开发。为什么是Java?

JDK4提供了NIO类库——异步IO, NIO框架也越来越被人熟知,而且Mina、Netty都是基于NIO网络框架的。随着大规模分布式系统、大数据和流式计算框架的崛起,基于Java构建这些系统已经成为主流,NIO编程和NIO框架也得到了广泛应用。在互联网领域,阿里的分布式服务框架Dubbo、RocketMQ、大数据的基础序列化通信框架Avro,以及很多开源的软件都已经使用Netty框架构建高性能、分布式的通信。所以,Java是能胜任游戏服务器开发的,也完全能满足当下的游戏性能要求。本书各章内容

本书分为基础篇、入门篇和高级篇三个篇章,共10章。

基础篇

从游戏行业的基础知识讲起,带领读者进入游戏开发领域,做一些前置的准备工作。

第1章

讲解游戏的理论知识、游戏行业的现状及发展、游戏开发中的要点等,让读者了解游戏服务器开发的基本内容。

第2章

为后续开发做准备,讲解Java开发环境搭建,并介绍了一些常用开发工具。

入门篇

以Java游戏服务器技术为核心,分模块展开讲解,真正从技术上了解并掌握游戏服务器开发技术。

第3章

网络对游戏服务器起着至关重要的作用,本章讲解游戏服务器开发中的网络层。

第4章

传输数据时,需要拟定双方都能解析的数据格式,使双方都能辨别。

第5章

游戏数据多种多样,如何进行数据缓存,如何使数据持久化,本章将一一进行介绍。

第6章

游戏逻辑是游戏服务器的心脏,不同游戏的业务逻辑,对应着不同的逻辑代码。本章将介绍如何根据游戏业务逻辑进行逻辑层的开发。

第7章

开发游戏服务器时必须要做安全性保护。在外挂满天飞的时代,一个优秀的游戏服务器必须对各种有意或无意的攻击做好安全防护。

高级篇

讲解游戏服务器的架构设计及系统优化,从更高的角度了解游戏服务器,并用一个实例代码进行具体说明。

第8章

分析市面上常见网络游戏的服务器架构,学会分析优秀的架构,了解好的架构对游戏服务器的重要性。

第9章

本章讲解一款游戏实战,指导读者上手开发一款游戏服务器,了解游戏服务器开发中的基本模式,也是对本书所讲内容的一个综合应用。

第10章

本章展望游戏行业的未来,分析游戏行业的走向。本书读者对象非游戏行业但想入门游戏行业的Java工程师。想了解游戏服务端技术的游戏前端工程师。需要游戏服务器开发入门工具书的人员。其他对游戏服务器开发有兴趣爱好的各类人员。基础篇走进游戏开发说到游戏,我相信大家都不陌生,有些人甚至因为小时候沉迷于游戏,而挨过父母的打骂。本章以认识游戏开始讲起,同时讲解了游戏行业现状及服务器的作用。第1章认识游戏

游戏是我们再熟悉不过的东西了,有的人每天都会打游戏,来打发无聊的时间,有的人会在紧张的工作之后玩玩游戏,缓解疲劳。但游戏究竟是一种什么样的东西呢?本章就来聊聊我们既熟悉又陌生的东西——游戏。1.1 什么是游戏

什么是游戏?这个问题似乎很简单,每个人都能说出一些答案,比如“游戏就是拿着手柄对着电视机狂按的小霸王游戏机”、“游戏就是放学后同学相约去网吧一起玩耍的东西”、“游戏就是大人不让小孩子玩的东西”。下面我就为大家介绍一下什么是游戏。1.1.1 游戏的定义

游戏并非只有电子游戏一种,跳皮筋、石头剪刀布等都属于游戏,只不过现在最流行的电子游戏被人们默认为游戏的代名词。实际上,任何娱乐活动,如打麻将、打牌等,都可以称为游戏。人类是高级灵长类动物,除了生活之外,还需要娱乐来丰富生活,于是就产生了各种各样的游戏。所以我个人对游戏的定义就是:任何人类正常生理需求之外的活动均可称为游戏。下面我们来看看名人对于游戏的定义。

1.柏拉图对游戏的定义

游戏是所有人或动物幼年时期增强生活能力需要所产生的有意识的模拟活动。

2.亚里士多德对游戏的定义

游戏是劳作后的休息和消遣,是本身不带有任何目的性的一种行为活动。

3.拉夫·科斯特对游戏的定义

游戏就是在快乐中学会某种本领的活动。

4.辞海中关于游戏的定义

以直接获得快感为主要目的,且必须有主体参与互动的活动。

这个定义说明了游戏最基本的特性:(1)以直接获得快感(包括生理和心理的愉悦)为主要目的。(2)直接获得快感。我们能够从游戏中直接获取到让我们快乐的主观感受。(3)主体参与互动,指主体动作、语言、表情等变化与获得快感的刺激方式及刺激程度有直接联系。

游戏充斥着我们的生活,而且形式多样,但本书所讲的游戏只限于电子游戏。1.1.2 游戏的分类

了解了游戏的定义之后,我们再来具体看看什么是电子游戏。电子游戏是时代发展的产物,它的产生大大丰富了人们的生活,使人们在闲暇时可以放松身心,这对生理及心理的调节都是很有帮助的,适当的游戏还能大大提高人们的工作效率(但过度沉迷于游戏就会损害人体的生理机能,如颈椎、眼睛等部位,这也是父母不让孩子玩游戏的重要原因)。随着时代变迁及硬件发展,电子游戏产品也从小霸王游戏机发展到PC端,再发展到现在的PS2、手机、XBOX等常见的电子游戏载体。

除了单机和网游的区别之外,游戏的类型也是多种多样的,下面就简单地对游戏类型做一介绍。(1)RPG(Role-playing Game,角色扮演游戏)

角色扮演类游戏是国内最流行的游戏类型,相信大家对这类游戏并不陌生,很多大型的网游都是角色扮演游戏。角色扮演能让玩家身临其境,有非常好的真实感。

举例:《剑灵》、《天下三》。(2)ACT(Action Game,动作游戏)

动作类游戏也是非常常见的,即玩家操控游戏中的角色进行各种激烈的打斗,在游戏中获胜之后会有一种很强烈的成就感。

举例:《拳皇》。(3)AVG(Adventure Game,冒险游戏)

由玩家控制游戏人物进行冒险,大多数冒险游戏以关卡形式体现,被玩家操控的游戏人物经历重重关卡阻碍,取得最终的胜利。

举例:《超级玛丽》、《魂斗罗》。(4)FPS(First Personal Shooting Game,第一人称视角射击游戏)

第一人称视角游戏是以玩家的视角进行射击类游戏操作。

第一人称视角射击能给人很强烈的即视感,玩过FPS游戏的人都能被它深深迷住。

举例:CS、《逆战》、CF、Left 4 Dead。(5)TPS(Third Personal Shooting Game,第三人称视角射击游戏)

第三人称视角射击是以玩家之外的视角来观察游戏人物,玩家能清晰地看到游戏人物的一举一动。

举例:《古墓丽影》。(6)FTG(Fighting Game,格斗游戏)

格斗游戏就是简单地让玩家操控游戏人物在游戏中相互格斗,最终打倒对方获得胜利。

举例:《拳皇》。(7)SPT(Sports Game,体育类游戏)

在PC上模拟各种体育活动的游戏。

举例:NBA2KOline、FIFA。(8)RAC(Racing Game,竞速游戏,也有人称其为RCG)

在PC上模拟竞速,比如摩托竞速、赛车竞速等。这类游戏通常能让玩家体验到现实生活中体验不到的速度感。

举例:《极品飞车》、《真实赛车》。(9)RTS(Real-Time Strategy Game,即时战略游戏)

这类游戏多是突出战术作用的SLG游戏的一个分支。

举例:《红警》、《星际争霸》。(10)STG(Shooting Game,射击类游戏)

这类游戏基本都是竖版的射击类游戏,在手机上有更多的可玩性。

举例:《雷电》、《全民打飞机》。(11)SLG(Simulation Game,策略游戏)

这是目前手游中比较流行的一类游戏,通常要求玩家有一定的水平,在游戏中能展现更多的策略性,对多操作的要求不是很高。

举例:COC、COK。(12)MSC(Music Game,音乐游戏)

这类游戏是为热爱音乐的人设计的,玩家可在游戏中享受到美妙的音乐,玩法也多种多样,大部分游戏都是让玩家跟着音乐的节奏进行操作。

举例:《劲乐团》、《QQ炫舞》、《节奏大师》、Deemo。(13)SIM(Simulation Game,生活模拟游戏)

与SLG不同,此类游戏高度模拟现实,能自由构建游戏中人与人之间的关系,可以像现实生活一样进行人际交往,还可以联网与众多玩家一起游戏。

举例:《模拟人生》。(14)TCG(Trading Card Game,育成游戏)

以前GB系列泛用,一般大家都用EDU(Education)来指代该类游戏,以便于和TCG区分开,这是玩家模拟培养的游戏。

举例:《美少女梦工厂》、《明星志愿》、《凌波丽育成计划》。(15)CAG(Card Game,卡片游戏)

玩家操纵角色通过卡片战斗模式进行的游戏。丰富的卡片种类使游戏更多变,给玩家带来无限的乐趣。

举例:《炉石传说》。(16)LVG(Love Game,恋爱游戏)

这是主要为男性制作的游戏。

举例:《心跳回忆》、《思君》、《青涩宝贝》、《秋忆》。(17)GAL(Girl And Love GAME,美少女游戏)

这类游戏盛产于日本,在我国几乎都是不符合法律要求的游戏。

举例:《真实的女朋友》。(18)WAG(Wap Game,手机游戏)

目前,手机游戏与PC基本是同等级别的。

举例:《天子》。(19)MMORPG(Massively Multiplayer Online Role Playing Game,大型多人在线角色扮演游戏)

目前,市面上常见的网游几乎都属于这类游戏。

举例:《剑灵》、《剑网三》。(20)ARPG(Action Role-playing Game,动作角色扮演类游戏)

这是动作类游戏和角色扮演类游戏的综合体,是主要以动作为主的RPG游戏。

举例:《功夫熊猫》。(21)ETC(etc. Game,其他类游戏)

指玩家互动内容较少,或作品类型不明了的游戏类型,通常不需要玩家太多的操作,基本相当于看剧情的游戏。

举例:Minecraft Story Mode、《行尸走肉》。(22)动漫游戏

以同名动漫为原型制作的游戏,也有一些动漫游戏纯粹以动漫人物与类似动漫的情节为主板,但以同名动漫为原型改编的游戏占的比例多一些。

举例:《舰娘》。(23)MOBA(Multiplayer Online Battle Arena,多人在线战术竞技游戏)

MOBA也被称为Action Real-Time Strategy(Action RTS, ARTS),是视频游戏(Video Game)——即时战略游戏(RTS)的一个子类。目前这类游戏风靡全球,通常玩家需要购买装备,通过三四十分钟一局的形式开始两队的对抗,一般需要团队合作。

举例:《英雄联盟》、DOTA 2。

上述各类游戏的简写并不需要记住,但需要大概了解各个类型的游戏及其特色,以便在开发时更准确地搭建游戏架构。后续章节会对以上几种游戏架构进行简单分析介绍。

从古至今,游戏从打牌、下棋,发展到小霸王游戏机,再发展到PC游戏、手机游戏,从来没有间断过。人类已经离不开游戏了,游戏开发者有义务为玩家开发出更优秀、更用心的游戏。1.2 游戏开发及分工

认识了游戏之后,我们就来了解一下游戏的开发。标准的软件开发大致需要经历以下几个阶段。

1.可行性与计划研究阶段

首先需要拟定可行性研究报告,制定该软件的开发目标和总要求,并从多个角度进行一系列可行性分析,判断项目是否可行。通过之后就要制订项目开发计划,将开发过程中的经费预算、模块划分、开发进度、所需硬件和软件条件编制成文档。

2.需求分析阶段

与客户沟通项目具体需求,此阶段的目的是让开发者和客户对项目的理解达成一致,使最终产品与最初需求偏差不大。

3.设计阶段

确定需求之后就可以由架构师进行架构设计,之后就开始设计具体技术及实现。

4.开发阶段

架构搭建完成之后,便可以由开发者进行开发,应根据项目组内的分工进行开发。

5.测试阶段

开发完成之后,需要进行整体的集成测试、系统测试及验收测试。(实际上从需求分析阶段开始,测试工作就已经开始了)

6.系统验收

客户验收系统。

以上是所有软件开发大致的过程,传统软件开发需要软件需求分析师、产品经理、项目经理、架构师、技术支持、运维、测试工程师和软件销售。各岗位各司其职,在各个阶段完成各自的任务。游戏开发流程与上述流程大致相同,一款游戏的诞生也要经历可行性研究、需求分析、设计、开发、测试和系统验收几个阶段。但我认为,因为游戏CP商(游戏内容提供者)的客户是全国乃至全世界的玩家,所以游戏产品的推广还需要有商务推广阶段和游戏运营阶段。而且商务推广和游戏运营是决定一款游戏成功与否的重要阶段,好的运营可以把一款普通的IP推广到排行榜靠前的位置,也可以把本就很优秀的IP运营得一塌糊涂。

游戏开发的流程大概分为以下几步。

1.产品立项

产品立项一般是由公司高层经过市场调查发现某一类产品很有前途,打算做这一类产品,然后高层领导开会决定的。这些人可能包括美术总监、产品总监、游戏制作人、技术总监等。一致认同这个项目有一定可行性之后(通常立项前会有人做了充分的可行性分析,并提供可行性分析报告),就开始任命主策划(相当于项目经理),然后再分配技术、美术、策划、测试等工作人员。

2.游戏设计

主策划组织新队员开会之后,这个项目就算真正开始了,这时是系统策划最忙碌的时候,他们开始依据游戏的定位来策划不同的功能架构,然后再交由其他策划去填补框架,框架成型一部分之后,技术人员就可以开始讨论技术上的架构。同时,测试人员也开始对需求文档进行仔细研究。

传统软件开发中,可能需求分析和产品设计是划分模块来做的,而在游戏开发中,模块的划分更详细。游戏的产品设计职位叫作策划,策划又分为以下几种。(1)主策划:项目主要的策划,主要负责游戏整体的策划和项目管理,类似软件开发中的项目经理。(2)系统策划:负责游戏规则设计,各种玩法设定。(3)数值策划:负责游戏的平衡性,通过平衡战斗数值、基础数值等使玩家得到更好的体验。(4)文案策划:负责文案设计,包括物品信息、装备名等的文字包装。(5)关卡策划:负责关卡设计,包括怪物分布、敌人AI、陷阱分布、关卡难度等。(6)脚本策划:负责程序脚本编写,包括技能脚本、怪物AI、任务脚本等。

策划完游戏的产品设计之后,将其整理成文档交给开发者,技术人员按照文档内容去实现。

3.开发阶段

传统软件开发中技术人员可能还需要划分前端开发和后端开发。如果是Windows窗体软件,前端可能是C++工程师、C#工程师,后端可能是C++工程师或Java工程师。如果是Web APP开发,前端可能是HTML 5工程师,后端可能是Java工程师或PHP工程师。如果是iOS APP/Android APP开发,前端可能是iOS开发工程师,后端可能是Java工程师或PHP工程师。而在游戏开发中,前端可能是C++工程师、C#工程师或JavaScript工程师,后端可能是Java工程师或C++工程师。

由于开发的软件应用的领域不同,所以需要的人员也不同。即使同一个技术,在不同领域也有不同的应用,比如C++窗体开发和C++服务器开发涉及的技术就是不同的, Java Web开发和Java在游戏服务器的开发也是不同的。

当然,也不乏全栈工程师这样的人才,通常他们精通前后端开发,甚至包揽DBA和运维的工作。不过,我更赞同分工明确的做法,大家各司其职,齐心协力做好一件事情。

需求设计文档完成之后,应交由美术部门进行原画设计等美术工作,确定游戏风格,对游戏中的美术内容进行制作。技术人员要对技术工作进行定位,确定用什么技术实现会比较好。技术又分为前后端技术,前端技术研究使用什么样的前端游戏引擎,或者定制使用自研引擎(目前大的游戏公司如网易、完美等都有自己的游戏引擎),后端研究使用什么样的网络框架,对技术框架的设计都是基于游戏的定位。

举例来说,MMORPG和SLG无论是前端还是后端,可能都属于两种架构,MMORPG大多属于3D游戏,所以前端可能会使用Unreal、Unity等3D游戏引擎。而SLG大多属于2D游戏,所以使用Cocos2dx或Egret这种2D引擎偏多。如果游戏的需求是市面上的引擎都不能满足的,那么就需要自己研发游戏引擎。

同样,在后端开发中,MMORPG的玩家基本上都是在一个大地图中奔跑,并且能看到其他玩家不断移动,所以需要所有视野范围内的玩家实时数据同步,这就需要强联网长连接来实现。

而SLG大都属于单机玩法,使用长连接反而显得臃肿、浪费带宽流量,所以使用弱联网连接更符合需求。总之,每个游戏需求都需要一个与之对应的技术架构,一个好的架构是一款游戏的良好开端。

架构设计完成之后,就是技术人员持续的模块开发阶段,一般情况下,这个阶段以一两周为一个周期,大一点的游戏可能需要一两个月甚至更长时间。开发阶段,策划必须超前程序的开发,即在程序开发此版本的时候,策划必须策划出下一版本内容,同时也要支持程序的开发。美术部分也是与程序开发同步进行的,通常需要比程序超前一些,这样才能在开发中放入对应的资源,不使开发工作受到阻碍。

4.测试阶段

这里的测试阶段并不是游戏测试阶段,不是玩家可以来玩游戏了,而是项目组的测试人员对游戏的功能性和稳定性进行测试。测试阶段是贯穿整个开发流程的,从文档产生到程序的模块测试、集成测试、系统测试等,测试分析游戏中各种正常情况和极端情况下的bug,再通过工具(如bugfree)或文档将其交给对应模块开发者,开发者根据bug描述去修复,这个阶段可以一直迭代,直到bug数在可控范围内。常见测试方法有黑盒测试、白盒测试、Monkey测试等。

5.Alpha测试

Alpha测试即项目组的内部测试,测试对象可以是项目组成员、老板或项目组人员的亲朋好友等。先将游戏在自己的朋友圈内进行测试,测试完成后反馈问题给开发者去解决。(小公司一般会省去这个阶段)

6.Beta测试

Beta测试即我们常见的游戏内测,是在游戏正式上线前让小部分玩家进行删档或不删档测试,收集真实的游戏数据,这部分测试玩家在游戏正式上线后通常也会得到一定的福利。

7.上线推广阶段

如果公司觉得游戏产品的测试数据不错(通常判断次日留存、七日留存或付费率等数据),便可以交给商务部门进行大规模推广,比如手游就可以通过腾讯应用宝、iOS应用商店等进行推广。

8.运营阶段

游戏上线之后就是游戏运营成员展现实力的时候了,他们可以成千上万地向游戏中导入用户,让更多的玩家熟知这款游戏,并且在玩家玩游戏的时候不断推出各种各样的活动,让玩家感觉这款游戏有很大的发展空间、有更多的可玩性,比如在圣诞节推出圣诞老人领取礼物、在万圣节推出打败怪物获得奖励等活动。真正好的运营,可以带领玩家逐步深入游戏。1.3 游戏行业现状分析

了解了游戏和游戏开发,可能大家就会问,游戏行业的发展前景到底如何,是否有前途?答案是肯定的。随着科技不断进步,游戏的硬件载体越来越丰富多样,玩家的消费水平也普遍提高。换句话说,玩家在游戏中越来越有消费能力,游戏行业仍然是暴利行业。

曾经一夜暴红的Flappy Bird《围住神经病猫》等游戏使开发者一夜暴富。至于这些游戏为什么会火,我只能说它符合当时人们的游戏口味。因此,我们只要找对了玩家的口味,就有了一个赚钱的机会。当然,做游戏不能只以赚钱为目的,我们的终极目标是做出玩家真正喜欢的游戏。

现在的游戏行业在很多方面都有探索的空间,比如以下几个方面。

1.虚拟现实设备及内容

虚拟现实(Virtual Reality, VR)并不是新生的概念,早在20世纪60年代,它就已经被提出来了。随着科技进步,不少科幻影视作品里都出现了人们对于VR的遐想。在家里,你就能感受金字塔的宏伟、埃菲尔铁塔的壮丽、阿尔卑斯山的伟岸,或者来一场浪漫的太空之旅,又或者体验坐过山车的刺激。似乎只要拥有VR,人们就能拥有整个世界。不管是VR视频、VR教育,还是VR游戏,各个VR厂商都开始着手创造这些绝妙的VR遐想。根据各种统计数据显示,预测2016年将成为VR元年,这一年会有大量的VR作品产生。

目前VR硬件设备还没有达到一个统一的标准,无论是大厂商,如HTC Hive或者Ocular,还是一些小的硬件厂商,都在促使VR向更好的方向发展。在众人的努力与共同期待下,相信VR会有不错的前景。

在VR视频、VR教育和VR游戏等一系列VR产业中,最能让人感受到真实的必定是VR游戏。游戏是能让人与虚拟世界产生互动的,而这种互动更能让人产生愉悦感。或许人们不用再耗费时间和精力,就能在家里打一场羽毛球或踢一场足球,而在VR世界中,这些虚拟的感受就如同真实世界一样,就像真的打了一场羽毛球或真的踢了一场足球。VR游戏还能让人感受到更多真实世界中感受不到的东西,试想一下,在VR世界中玩《我的世界》(一款高自由度的沙盒生存游戏)、CS(一款FPS游戏)、《极品飞车》(一款竞速游戏)等游戏是什么感受。如果这些能带来强烈主观感受的、沉浸式的游戏真以VR的形式出现在我们身边,那么游戏又将是另外一种定义。

就目前形势来看,VR的时代即将到来,你们做好迎接它的准备了吗?

2.移动游戏操控设备

游戏设备经历了从小霸王游戏机到PC再到手机的变迁过程,游戏的操作方式也由手柄到键盘再到手机触屏,也有PSP这种掌机游戏机。但是目前,手机仍是大多数人玩游戏的主要设备,而手机的屏幕大小等一些限制使游戏的操作方式被限制在点击和移动等简单的操作上。2014年,新游互联推出了智能无线游戏手柄,完美地解决了手游在手机触屏操控中存在的问题,这款设备在24小时内就获得了百万筹金。移动游戏的外部操控设备有着不小的发展前景,一个好的移动游戏配上一个好的操作外设,能让玩家获得更多良好的游戏体验,未来这样的设备会越来越多且越来越受欢迎。

3.互联网+游戏创业

有数据统计,目前游戏行业的从业人员已超过30万,开发团队超过5000个。然而,以手游市场为例,只需5~10人便能组成一个团队,两三个月便能开发出一款游戏产品,即便如此,手游的存活率仅为千分之一。动辄几十万元的游戏引擎使用费,大公司对资源与渠道的垄断,削减了中小开发团队的竞争力。

小团队经常以开发游戏的数量来取得优势,或许4个游戏中只有1个能存活下来,并且达到较好的数据。如果这款游戏在一个渠道平均每天挣2000元,10个渠道每天就赚2万元,每个月就赚60万元。或许这个数据有些偏高,但如果成功的游戏不止一款,而是有三四款或十几款,那么去除游戏联运、购买资源等成本费,每个月的利润也是一个不小的数字,并且小团队的人数并不多,如果把这些钱均分给每个人,也是一笔可观的数额。当然,以上的推算都有一个前提,就是有那么一款或几款成功的游戏,如果你的任意一款游戏都打动不了玩家,那么玩家也不会埋单。

2010年,成立于芬兰的一家小游戏公司——Super Cell,由6位合伙人创建,创业之初不过十来个人,挤在一间几十平方米的小办公室开发游戏。他们最初仅凭借Hay Day和Clash Of Clans两款游戏,就创造了手游界的奇迹,公司收入从每月70万美元增长到每日250万美元,并且这种情况一直保持至今。最近其推出的一款卡牌实时对战策略手游Clash Royale,更是锦上添花,使公司每月都有几个亿的收入,超过了PC单机游戏的龙头——EA。Super Cell是一家真正的做游戏的公司,每款游戏都是精品,其凭借最前沿的创意和最出色的表现,成为当今手游界的领头羊。

4.电竞直播平台

随着竞技类游戏的兴起,电竞行业开始火爆,世界各地都在举办电竞比赛和活动。随之而来的自然就是电竞直播平台的火热,从电竞游戏、电竞赛事、内容制作到电竞直播,已经形成了一条完整的产业链,同时与电竞直播相关的广告等也能带来不少收益。

5.原创IP

从现在的手游不难看出,越来越多的影视、动漫、文学方面的作品,与游戏产品紧密结合。通过IP授权即可将其他产业的资源品牌引入到游戏中,打开了游戏行业的新方向。原创IP授权也就成了游戏行业的另一个发展方向。在未来,或许每一部电视剧、每一部电影,在上映的时候都会同步推出一款同名游戏,影视作品越火爆,越能带动同名游戏的火爆。IP+影视+游戏的产业链在未来或许是游戏行业的多条出路之一。

6.H5游戏

HTML5游戏也叫H5游戏。2015年,白鹭时代在北京国际会议中心举办了HTML5生态大会,大会介绍了Egret新的一整套工作流,为HTML5游戏的发展作出了巨大的贡献,并且暴风墨镜CEO黄晓杰也宣布Web VR实验室成立,这也就意味着,未来HTML5游戏不仅可能闻名于手游界,也可能被广泛使用在VR领域。

如今HTML5十分火爆,HTML5游戏也变得炙手可热,HTML5有着跨平台兼容及轻量的特点,并且从《愚公移山》的作品数据来看,HTML5游戏实现付费也不是不可能的。Cocos2d的js版本和白鹭的Egret引擎基本都有一整套成型的开发流。然而,个人认为,HTML5游戏也并非无所不能,未来的游戏是Native更吃香,还是Web更有吸引力?现在来说还为时过早。HTML5游戏虽然有着很好的跨平台兼容性,但是其用户体验比Native游戏稍微差一些,就Cocos2dx使用C++语言和Cocos2d-js使用JavaScript语言来看,在游戏性能上JavaScript目前还不能与C++媲美。我们不能断言谁一定能主宰游戏开发领域,但不管是谁统领了游戏开发领域,都会对游戏发展作出巨大的贡献,都值得每一个开发者学习。1.4 游戏服务器开发要点

上面说到了游戏行业的发展,那么游戏服务器在这个行业中处于怎样的地位呢?前面已经讲过,游戏开发分为前端开发和后端开发,后端开发就是服务器开发。当然,这里所说的后端开发,指的是网络游戏的开发,单机游戏自然也就不存在服务器,整个游戏的逻辑完全由客户端来承担。网络游戏的产生造就了游戏服务器开发工程师这个职业。本书以Java服务器开发为基础,那么如何做好Java游戏服务器开发呢?你需要做到以下几点。(1)你必须是一个热爱游戏、有一定游戏逻辑的开发者。完全不了解游戏、不明白游戏逻辑的人不适合做游戏服务器开发工作,做开发最重要的就是理解需求,只有真正玩过游戏、热爱游戏的人,才会更快地明白游戏的一些逻辑。(2)你需要了解网络知识,掌握一定的Java网络编程知识,了解OSI参考模型、套接字、长连接和短连接等网络基础知识。网络是网络游戏的核心(后续章节会介绍网络相关知识)。(3)你需要对Java并发编程有一定的了解,Java作为服务器开发工具必不可少的要涉及多线程开发,多个玩家在线的时候,不可能用单线程来处理所有的请求,这样服务器响应会非常慢甚至会出现掉线的情况,用户体验就会非常不好。(4)你需要明白Java的一些设计模式,比如常见的单例模式、工厂模式、观察者模式等。好的设计模式能让后台程序轻松应对游戏需求的变更。对于那些有硬编码习惯的人,需求一变更他们就会特别头疼。另外,设计模式也是程序开发时特别容易让人理解的内容,如果你的代码不只是你一个人查看和使用的,最好使用一些设计模式,以让别人更容易看懂。(5)你需要掌握数据库存储、缓存等游戏数据保存的途径。游戏中的热数据需要灵活使用缓存,冷数据需要持久化到数据库,因此你必须掌握至少一个数据库的使用方法和至少一个内存数据库的使用方法。目前常用的数据库有MySQL、Mongo,内存数据库有Redis、Memcache、Ehcache等。(6)你需要根据游戏逻辑提供相应的GM运营工具,可以写Windows窗体程序,也可以写Web程序进行GM管理运营。总之,你需要从你的游戏逻辑中提供一些GM接口,接入到GM运营工具中。(7)你需要掌握系统运维知识,服务器的部署、架构搭建、负载均衡、日志管理、数据备份恢复、灾难处理等,你都要掌握。如果你不甘于只做游戏逻辑的后端开发,系统运维知识也是必不可少的,至少对于服务器主程来说,这些知识是必不可少的。

以上七点是我总结的做Java游戏服务器开发需必备的一些技能。我们知道, Java更多的是被应用到Web开发中,那么这两者有什么异同点呢?下面简单说一下,以助Web开发者快速转到游戏开发中来。(1)从第三方支持来说,Web后台有很多成熟的第三方框架,开发者不需要关心底层控制器跳转的实现,只需要一个或几个配置文件,就能完成核心控制器的部分,而开发者只需要关注Web自身的业务逻辑,将逻辑与框架融合即可。使用框架不仅简化了控制层代码,又很好地实现了业务逻辑的分层。而在游戏后台开发中,各种游戏的需求差异性很大,从网络层到业务逻辑层,各方面都必须根据游戏需求搭建适合的框架,因此很难有一些通用的内容能提炼出一款成熟的框架。游戏后台开发基本都需要自己搭建适合的框架,Web项目的发布一般依赖Tomcat或JBoss这种Web容器,而游戏开发基本上都是自己实现一个HTTP服务器或Socket服务器。(2)从业务逻辑层面来说,Web后台的逻辑都是大同小异的,或许这一套系统的逻辑稍微改一改,另一套系统就能用。而游戏就不同了,每个游戏都有自己的特色,要根据策划的不同需求实现不同的逻辑,虽然也会有一些通用模块,但整体的差异性还是很大的。(3)从数据持久化来说,Web的数据基本上是很规整的,表与表之间关系很明确,并且以后也不会有太大的变化。而游戏中的数据多种多样,开服之后数据的变化也是多种多样的,传统的关系型数据库甚至根本无法满足游戏数据持久化的需求,游戏中有很多状态和数据是需要服务器来保存的。个人认为,在游戏开发中,NoSQL比关系型数据库更实用。Web开发更注重数据之间的对应关系,而对于游戏开发来说,数据库基本上只是玩家下线后数据保留的一个场所。(4)从通信层面来说,Web中的用户都是一个个独立的个体,而游戏是多人在线的一个游戏世界。在这个游戏世界中,玩家与玩家之间需要进行交互,这就需要服务器实时地向所有在线玩家进行消息广播,这是非常占用带宽的,并且玩家的每一步操作都会向服务器发起一个请求,这对服务器的性能要求也是非常高的。所以在这方面,游戏后台要比Web做更多的处理,游戏服务器大都属于IO密集型的。1.5 总结

本书作为一本Java游戏服务器开发的书籍,先从游戏的产生讲起,然后讲解了游戏开发及分工,并对游戏行业的现状及未来发展进行了分析,最后介绍了游戏服务器开发在游戏开发中的作用,由浅入深地为大家开始Java游戏服务器开发做了一些简单的理论铺垫。下章我们将真正进入到开发实战环境,带领大家揭开Java游戏服务器开发的神秘面纱。第2章环境搭建

所谓“工欲善其事,必先利其器”,在深入学习Java服务器开发之前,首先要搭建好开发环境,并熟练掌握开发工具。本书讲解以Eclipse作为开发IDE,使用JDK1.6,并使用Maven管理项目,项目大体框架采用Spring+Hibernate进行搭建,其他部分框架依据具体情况使用。2.1 Windows开发环境搭建

目前大部分开发者使用的都是Windows开发环境,下面先来讲解如何在Windows下进行环境搭建。2.1.1 安装JDK

我们要进行的必不可少的操作就是安装JDK,并配上环境变量。JDK的官方下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html (本书所有环境都基于JDK1.6版本)。单击“jdk-6u5-windows-x64.exe”直接安装,安装时根据导航进行操作即可,本人不建议更换java默认安装目录。

安装完成后就开始配置环境变量,右击“我的电脑”,选择“属性—高级”选项,进行环境变量设置,我们将在这里设置Java的系统环境变量。

1.设置Path变量

如果你想在任意目录下使用Java命令,就需要系统能随时找到Java的应用程序,在Windows环境下,就需要把这个应用程序的目录配置到环境变量中。如你的安装目录是C:\jdk1.6.0,那么Java应用程序就在C:\jdk1.6.0\bin下,我们只需要把C:\jdk1.6.0\bin这个目录配置到环境变量的Path中,就能在任意目录使用Javac、Java、Javaw等Java命令。

在系统变量里找到Path变量单击并编辑:变量名: path变量值: C:\jdk1.6.0\bin;

2.设置CLASSPATH环境变量

在最初的JDK版本中需要配置CLASSPATH,是因为JRE还找不到它自带的类库,如tools.jar或dt.jar,而我们在开发时又需要用到这些类库,所以需要配置CLASSPATH。自JDK1.5版本之后,CLASSPATH就不再是必须配置的变量,如果在Eclipse中开发,更不用配置CLASSPATH,因为Eclipse自带我们需要的类库。这里我们还是配置一下,在环境变量中找到CLASSPATH遍历,如果没有就手动新建一个,并添加下列路径:变量名: CLASSPATH变量值: .; %JAVA_HOME%\lib\tools.jar; %JAVA_HOME%\lib\dt.jar; (注意:在CLASSPATH的最前面有一个 ".",表示当前目录)

3.设置JAVA_HOME

设置JAVA_HOME可以方便设置其他目录时对Java目录的引用,如果设置JAVA_HOME后要使用该路径,只需在变量中假设%JAVA_HOME%即可,以避免重复输入路径字符串。一旦路径改变,只需改变JAVA_HOME即可,如果没有JAVA_HOME,路径的改变可能就需要修改很多路径,一旦考虑不全,可能导致Java的环境配置错误。另外,很多第三方软件,如Tomcat,会引用约定俗成的JAVA_HOME作为Java的访问目录路径,如果没有JAVA_HOME,很可能需要自行修改其配置文件。

在系统环境变量一栏新建JAVA_HOME:变量名:JAVA_HOME变量值:C:\jdk1.6.0

通过以上步骤,就可以用Windows下的命令行来测试JDK环境是否安装好,按快捷键“Win+R”打开运行窗口,在运行窗口输入“cmd”,按回车键打开Windows的Dos命令终端窗口。输入命令java -version,可以看到当前JDK的版本,如果提示“java不是内部或外部命令,也不是可运行的程序或批处理文件”,那很可能是环境变量没有配置好。输入java命令,可以查看java命令的用法介绍;输入javac命令可以编译java源文件。如果以上命令都没有出现问题,那么基本上JDK环境就搭建好了。2.1.2 安装Eclipse

搭建好JDK开发环境之后,就可以开发Java程序了,我们可以用记事本写一个以.java结尾的Java源文件,并在命令行中用javac进行编译,然后用java命令运行编译好的.class文件。

如果将以上步骤作为项目开发流程,未免有些太烦琐了,并且也会非常不方便,这时,就要用到IDE(Integration Development Environment,集成开发环境)。Java最常用的IDE就是Eclipse、NetBeans、IntelliJ IDEA等。本书使用Eclipse作为IDE, Eclipse官方下载地址为http://www.eclipse.org/ downloads/。

Eclipse是一个集成开发环境,它本身是基于Java的,并且是一个完全开放源代码的可扩展平台。Eclipse本身只是框架或者说是一组服务,它是通过插件组件来构建的开发环境。Eclipse自带一个标准的插件集,做C++开发可以用CDT插件、做Android开发可以用ADT插件、做Go语言开发可以用goclipse插件、做Node开发可以用noclipse插件。Eclipse的插件库已经比较完善,即使Eclipse在其他方面仍然存在很多缺陷,但它仍是非常受欢迎的一款完善的工作流工具。

Eclipse还有很多快捷键,使用这些快捷键,能够提高工作效率,常用快捷键如表2-1所示。表2-1 Eclipse常用快捷键快捷键说明Ctrl+1快速修复Ctrl+Shift+O自动导入所需要的包Ctrl+D删除当前行复制当前行到下一行(复制增加)Ctrl+Alt+↓Ctrl+Alt+↑复制当前行到上一行(复制增加)当前行和下一行交互位置Alt+↓当前行和上一行交互位置Alt+↑前一个编辑的页面Alt+←下一个编辑的页面Alt+→Shift+Enter在当前行的下一行插入空行Shift+Ctrl+Enter在当前行插入空行Ctrl+O快速显示OutLineCtrl+Q定位到最后编辑的地方Ctrl+/注释当前行,再次使用此快捷键则取消注释Ctrl+/(小键盘)折叠当前类中的所有代码Ctrl+×(小键盘)展开当前类中的所有代码Ctrl+Shift+X把当前选中的文本全部变为小写Ctrl+Shift+Y把当前选中的文本全部变为大写Ctrl+Shift+F格式化当前代码

表2-1只整理了一小部分比较常用的快捷键,更多实用的快捷键需要在平时操作的时候记忆,熟练使用快捷键能很好地提升工作效率。2.1.3 安装数据库客户端工具

利用Java进行服务器开发,必不可少地要用到数据库,利用数据库的一些客户端工具能提升开发效率。以下是几款常用的数据库客户端工具:(1)Navicat for MySQL(MySQL):http://www.navicat.com.cn/。(2)MongoVUE(Mongo):http://www.mongovue.com。(3)RedisClient(Redis):https://github.com/caoxinyu/RedisClient。2.1.4 安装SSH工具

在服务器开发中需要使用SSH工具部署项目到开发服务器或正式服务器,SSH工具也有很多种,下面是两款Windows下的SSH工具(使用哪种工具全凭个人喜好)。(1)XShell:http://www.netsarang.com/products/xsh_overview.html。(2)SSH:http://ultra.pr.erau.edu/~jaffem/tutorial/SSH_secure_shell_client.htm。2.1.5 安装其他工具

在服务器开发中需要用到的或者能提高开发效率的工具都需要安装。

1.文本编辑器

Editplus:https://www.editplus.com/download.html。

Sublime Text:http://www.sublimetext.com/。

2.容器

Tomcat:https://tomcat.apache.org/。

JBoss:http://jbossas.jboss.org/downloads/。

3.JSON解析工具

在线JSON解析:http://json.cn。2.2 Mac OS X开发环境搭建

OS X是苹果公司的Mac系列产品的操作系统,这款操作系统只能运行在Mac系列产品的硬件之上。OS X操作系统的宗旨是简洁。

1985年,史蒂夫·乔布斯(Steve Jobs)被迫离开苹果公司后,成立了NeXT公司,并开发了面向对象操作系统——Openstep,后来苹果公司收购了NeXT公司,史蒂夫·乔布斯再次担任苹果公司CEO,并将Mac OS与Openstep进行整合,开发出了全世界第一个基于FreeBSD的面向对象操作系统——OS X。

不管Mac OS X历史如何,个人认为,这个操作系统就是为程序员设计的,它有类似Windows的GUI界面,也有UNIX的性能,是兼容二者优点于一身的操作系统,可以在Mac OS X上直接使用UNIX命令操作,并且在系统安装完成后,它就默认安装了python、jdk、apache等常用的开发环境,为开发者提供了很多便利。下面就开始学习如何在Mac OS X上搭建开发环境。2.2.1 安装JDK

上面说到Mac OS X安装完成后,就默认安装了JDK环境,但是我们还是有必要说明一下JDK的安装步骤。因为或许系统默认安装的JDK版本并不是我们想要的,此时就需要安装其他版本的JDK。

Oracle官网从JDK1.7才有了Mac版本的安装包,但有的项目却要使用JDK1.6,此时就可以通过其他方法安装JDK1.6。Apple的开发者网站提供了JDK1.6的安装包,可以在此下载JDK1.6。

下载地址:http://connect.apple.com/。

默认的JRE路径:/System/Library/Frameworks/JavaVM.framework/Versions/ CurrentJDK/Home。

Apple的JDK路径:/Library/Java/JavaVirtualMachines/。

JAVA_HOME路径:/Library/Java.JavaVirtualMachines/1.6_29.jdk/Contents/Home。

与Windows系统一样,在Mac OS X系统下,仍然需要配置JAVA_HOME到系统环境变量。在UNIX系列中,操作系统最重要的文件就是/etc/profile,这个文件包含一些重要的配置信息,需要在这个文件中添加以下代码(以1.6_29开头的文件夹名字代表你的Java版本):JAVA_HOME=/Library/Java/JavaVirtualMachines/1.6_29.jdk/Contents/Home/export JAVA_HOME2.2.2 安装Eclipse

做Java开发必不可少的还是Eclipse, Eclipse是基于Java编写的IDE,也有Mac版本的。在Eclipse官网就有Mac版本的下载链接:http://www.eclipse.org/downloads/。

其他内容,如Eclipse快捷键等,可以参照Windows环境搭建中的Eclipse安装部分。2.2.3 安装数据库客户端工具

在Mac端也有很多数据库客户端工具。(1)Navicat for MySQL for Mac(MySQL):http://www.navicat.com/download。(2)Redis Desktop Manager(Redis):http://redisdesktop.com/。(3)RockMongo(Mongo):http://rockmongo.com/。2.2.4 安装SSH工具

Mac虽然没有XShell,但其有很好用的Zoc。

Zoc:http://www.emtec.com/download.html#zocfiles。2.2.5 安装其他工具

1.文本编辑器

Textmate:http://macromates.com/。

Sublime Text:http://www.sublimetext.com/。

Mac自带的Vim也是很好用的。

2.容器

Tomcat:https://tomcat.apache.org/。

JBoss:http://jbossas.jboss.org/downloads/。

3.JSON解析工具

在线JSON解析:http://json.cn。

在Mac下搭建开发环境与Windows环境差不多,但由于存在一些系统环境的差异,有些内容的安装可能稍微复杂,不过熟悉UNIX系统的读者应该很快就能安装好。2.3 Linux服务器环境搭建

以上两节内容均为开发环境的搭建,但服务器的开发除了要求在本地运行没有问题之外,还要求部署项目到服务器上时也能平稳运行。所以,我们除了在本地搭建开发环境之外,还需要在服务器搭建项目的运行环境。本节主要讲解常用的环境及数据库等的安装与配置。2.3.1 安装JDK

Java开发必不可少的是JDK(Java Development Kit), Linux系统下的JDK安装与Mac OS X下的JDK安装步骤大致相同,首先需要在官网下载需要的JDK版本。

官方下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html。

官方的JDK安装包有多种版本,这里以后缀为bin的JDK安装包为例:(1)在Linux服务器上创建JDK的文件夹:mkdir /usr/java,然后将下载好的bin文件复制到文件夹中。(2)更改文件权限:chmod 755 jdk-6u11-linux-i586.bin。(3)执行安装包文件:. /jdk-6u11-linux-i586.bin。(4)执行过程中,需要按照提示输入“yes”或“y”进行解压。(5)安装完成后,JDK会被安装到/usr/java文件夹中,然后需要配置系统环境变量。打开/etc/profile文件,配置Java的环境变量:#打开 /etc/profile,在里面添加如下内容export JAVA_HOME=/usr/java/jdk1.6.0_27export JAVA_BIN=/usr/java/jdk1.6.0_27/binexport PATH=$PATH:$JAVA_HOME/binexport CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jarexport JAVA_HOME JAVA_BIN PATH CLASSPATH让/etc/profile文件修改后立即生效,可以使用如下命令:# . /etc/profile

输入命令java -verion、javaw、javac即可检验JDK环境是否安装完成。2.3.2 安装Tomcat

如果Java程序都有Web服务器,就需要Tomcat这样的容器进行加载,Tomcat的Linux版本也可在其官网上下载。

官方下载地址:http://tomcat.apache.org/download-60.cgi。

其也有很多版本,下面以tar.gz版本为例进行讲解。(选择Binary Distributions下的文件)(1)在Linux服务器中创建目录mkdir /usr/tomcat,并将安装包复制进去。(2)解压安装包到目录:tar -zxvf apache-tomcat-6.tar.gz,解压完成后,进入解压出来的目录。

conf目录是Tomcat的配置文件目录,server.xml就是Tomcat的核心配置文件,通过server.xml的Connector可以配置端口号、最大线程、最大等待时间等参数。

Webapp目录是Tomcat发布项目的目录。

logs目录是Tomcat运行时的日志记录。

bin目录是Tomcat核心脚本文件目录,startup.sh是它的启动脚本,shutdown.sh是它的关闭脚本。

关闭Tomcat的配置和优化的内容还有很多,这里不再赘述,只要配置好Connector端口号即可,其他性能优化可参照网络上的资料。

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载