又是一个美好的周末啊,如今一到周末,早上就起得晚,下午困了又会睡一两个小时,上班的时候,早上起来喝一杯咖啡,而后就能高效的工做一成天,然而到了周末人就懒散了,哈哈。前端
最近刚跳槽,到新公司已经干了有两周时间了,这两周时间是过得比较充实的,由于这家新公司是个小公司,之前以单机开发为主,服务器方面我一我的,作两个游戏的服务器开发工做,固然,一个很简单,另外一个就相对复杂点,简单的那个是个弱联网游戏,服务器只须要作好数据存档和登陆支付验证就行了,而另外一个,则是相对复杂的slg游戏,我感受这是又一款cok,而公司目前并不打算再招服务器了,因此估计这个项目我会一我的干到明年吧,等第一款上线赚钱了,可能会再招服务器。老实说,面试的时候,我就以为这份工做对我而言是一个挑战,而当我清楚的了解了公司情况以后,我依然决定接受这个挑战。java
说说我以前的经历吧,大四的时候,学校安排来北京培训java(培训没什么丢脸的,出来找工做我也用的真学历真背景,不像某峰互联),以后我去了培训机构推荐的公司实习,那个时候,工资2k,然而工做也干得很开心,跟着前辈学到了很多东西,当时是作微信公众号开发的,我跟着前辈作微信后台开发,当时使用SpringMVC+MyBatis框架,刚接触的时候,我本身学了挺久才弄明白,后来弄明白以后想一想,其实挺简单,对于逻辑开发的程序员来讲,你只须要弄懂工做流程就行了,页面怎么跳转,跳转怎么传值,数据怎么处理,这些足够了,固然我是个不知足的人,我会去弄明白,为何用这个框架、为何不用别的、用这个有什么好处、若是让我本身来作这个后台、我会怎么搭建?带着这些问题,我会试着本身搭建一下后台框架(虽然前期大部分是复制粘贴)。除了框架部分,微信高级接口也是我研究的重点,我会去官方文档看看微信是怎么接入的,而后研究研究前辈的代码是怎么写的,所谓的干一行爱一行大概就是这样吧,当时我以为,微信开发,是颇有前途的,而咱们公司用的框架,也是最早进的(后来看来,确实这个框架组合是当前最流行的框架,而当时,微信公众号也确实是当时互联网行业的一个风口,微信后来把h5带起来了,致使如今一个好的h5前端都是供不该求的,薪资很高)。node
说了这么多,为何后来又转行作游戏了呢?实际上是这样的,当时在第一家公司,个人上级打算跳槽走了,带走整个下面的技术,而不带实习生,有那么一两个月,实习生就一直闲着没事作,对于我来讲,这样过着就太无聊了,我喜欢挑战,因而我投简历,从新找了份实习工做,在一个游戏公司作java服务器开发,公司挺大的,几年前凭借一款slg页游称霸游戏行业(什么游戏我就不说了,说了就知道什么公司了),后来游戏行业往手游发展,这款slg也出了手游版,这一款游戏,几乎支撑了整个公司,再加上后来出的几款手游,公司发展挺好的,我所实习的部门作的是一款mmorpg手游,从实习作到了转正,作了近一年了,然而这款rpg手游的数据却不是太好,第一次封测第二天留存23,第二次26(如今这家公司的游戏能达到80屡次日留存),七日就更不用说了,而我也能感受到,做为一款mmo游戏,玩家之间的交互实在太少,从头玩下来,我以为这是一款单机,失去了mmo的本质,在项目组准备进行第三次封测的时候,我选择了离开,缘由不少,不只仅由于游戏数据很差,也有一些我的缘由吧,不过说实话,是这家公司带我走进了游戏行业,我很感谢,我以为游戏行业是一个很是有前景的行业,甚至比以前我认为最好的微信开发还要好,游戏行业很是暴利,在这家公司工做就能感觉到,策划文档中,充满了挖坑预留的计费点,这一块能够正常玩儿,但你若是充钱,你就比别人牛逼。网络游戏,最重要的,就是控制好平民玩家跟普通玩家的占比以及游戏平衡(当意识到公司的游戏如此处心积虑想要坑钱的时候,我忽然明白为何公司的游戏大多被腾讯代理了,为何腾讯控股,原来如此,没钱玩儿你**,哈哈)。由此也能够看出,游戏的商业化,已经把游戏公司带入了一个固定的模式——无条件坑钱,我以为已经失去了游戏的本质,我看过一本书,叫《游戏人生》(当时在cocos2014年开发者大会上买的。以为挺值的),书已经送人了,但内容我看了一大半,从游戏的产生,到玩家的心理,到为何须要游戏,这本书都诠释的热别好(我以为游戏策划都应该看看这本书,作良心游戏,拒绝一味坑钱)。啊,忽然发现这一段说的有点偏了,说到底,我也只是作游戏服务器开发的,我也改变不了游戏行业,我只要作好我作的。其实大的游戏公司,就应该走这种商业化路线,凭借几款长生命周期的游戏,支撑公司流水。mysql
从转行作游戏以后,我却是以为,游戏开发比web开发有趣多了,固然技术上也比web难多了,以前发过一篇讨论,web开发何和游戏开发的区别,http://gad.qq.com/content/wendetail/7082370,我把个人答案再粘贴一遍(其实是别人要求我上他的号去回答的,因而我就本身回答了我本身的问题):程序员
1.从第三方支持来讲,web后台有不少成熟的第三方框架,开发者不须要关心底层控制器跳转的实现,只须要一个或几个配置文件,就能完成核心控制器的部分,而开发者只须要关注web自身的业务逻辑,将逻辑与框架融合便可,使用框架一方面简化控制层代码,一方面很好的实现了业务逻辑的分层。而游戏后台开发中,由于各类游戏的需求差别性很大,从网络层,到业务逻辑层,各方面都必须根据本身游戏需求搭建适合本身的框架,所以很难有一些通用的东西能提炼出来一款成熟的框架,游戏后台开发基本上须要本身搭建适合本身的框架。web
2.从业务逻辑层面来讲,web后台基本上逻辑都是大同小异的,或许这一套系统,稍微改改,另外一套系统就能用,而游戏就不一样了,每一个游戏都有本身的特点,根据策划的不一样需求而实现不一样的逻辑,不过也会有一些通用的模块,但总体上差别性仍是很大的。面试
3.从数据持久化来讲,web的数据基本上是很规整的,表与表之间关系很明确,而且之后也不会有太大的变化,而游戏中的数据多种多样,随着开服以后,数据的变化也是多种多样,甚至传统的关系型数据库根本没法知足游戏数据持久化的需求,游戏中有不少状态和数据是须要服务器来保存的,我我的认为,在游戏开发中,nosql比关系型数据库更实用。redis
4.从通讯层来讲,web中的用户都是一个个独立的个体,而游戏中是多人在线的一个游戏世界,在这个游戏世界中,玩家与玩家之间须要进行交互,这就须要服务器实时的向全部在线玩家进行消息广播,这一点很损耗服务器性能的,在这方面,游戏后台要比web作更多的处理,游戏服务器是一个IO密集的服务器类型。sql
以上即是我当时的答案,或许个人看法尚浅,毕竟我作游戏不到一年,不过对于后台开发这块,我仍是有一点话语权的,从实习游戏开发开始,我便经历了一个转换的过程,几乎又是一个从零开始的学习过程,从mina框架到protobuffer,这些东西,我相信web开发不多接触(mina做为网络通讯框架,web中几乎只有http通讯,protobuffer做为通讯协议,web最多用json,其实两者形式上差异不大,但数据大小千差万别)。而游戏的逻辑,也是比web复杂得多,不得不说,web后台成熟的第三方框架是作的真的很好。数据库
经历了上家公司的洗礼,我想我对游戏后台开发有了足够的了解,因而我找到了我如今这家公司,这家公司目前只有我一个服务器后台,作两款游戏,一款是塔防类,准备由单机改为弱联网,服务器存档,并作登陆支付验证,另外一款,是比较庞大的slg手游,是准备带领公司走上巅峰的项目,说一款slg带领一个公司走上巅峰一点儿不为过,我上家公司就是这样的,凭借一款《xxxx》(哈哈,名字不透露),走上人生巅峰。我之因此接受这份工做,是由于我接受挑战,从底层写起,从架构写起,这是做为一年工做经验的我想都不敢想的,不过这是一个挑战自我,证实自个人机会,我愿意接受这个挑战,人生总会有不少爬坑的时候,但爬过了坑,就真的是人生巅峰了。我接受这个工做的另外一个缘由,就是公司发展确实不错,之前作的单机,都是很火的(虽然我认为我本身一我的也能作,我也是学过cocos的),而如今公司也准确的把握了游戏行业的风口——slg,coc和cok的成功案例就能证实一切,mmorpg也不必定能作起来了,moba却是有可能,但你要跟lol作不到80%的类似,我估计没人愿意在手机玩儿moba,slg或许是性价比最高的了。这么有挑战的工做,还要从架构写起,这样的挑战,我喜欢!
说说互联网业的书吧,我认为这个行业的书,分为两种,理论型的和技术型的,所谓理论型,就是长篇大论互联网发展,行业模式等,而技术型,就是相似技术的工具书,是从技能入手的书,这两种书,我家里都有,但我发现买了以后,我不多有时间看,下班没多少时间,北京上班,大多数时间都浪费在地铁上了,上班时间,看看理论型的吧,以为啰嗦,浪费时间(后来我发现,作这行,除了会技术,你仍是须要去看看牛人眼中的互联网的,你须要透过前辈的眼光看世界,不要作IT民工,要作互联网从业者),看看技术型的吧,让别人看见了感受你太low,因此我大多数时间仍是能在网上down到pdf就在电脑看,down不到百度谷歌我要研究的技术,毕竟从事这行,仍是用电脑学技术好点,主要是电脑看久了眼睛会疲惫,偶尔看看纸质的书也不错的。而之前面试的时候,面试官常常问,除了大学课本,你还看什么书啊?(若是是大家,恰巧又没看什么书,大家怎么说?),我通常会说,我会自学其余技术,如cocos2dx,而后买一些技术指南之类的书看。我以为这已经算最大夸张化了,由于大学我真的不多看书,我记忆中就看过一本C++技术类的,一本C#的,一本Android,还有其余几本是什么都不大记得了,大学毕竟十几层的图书馆,除了英语四六级的时候进去复习,其余时间感受都浪费了这十几层的图书馆。
说说成长过程当中遇到的问题吧,若是遇到我解决不了的,之前是先本身百度谷歌,看看有没有办法解决,不行就问老大,而如今,先百度谷歌,看有没有办法解决,没办法在百度谷歌,实在不行还要看框架源码如何实现,上国外论坛看外国友人如何解决,问题总能解决的,总会有办法的。当我开始学习写架构的时候,我会开始关心游戏的网络层使用什么框架,mina仍是netty,数据怎么存储mysql仍是mongo,是否须要缓存redis存什么,memcached存什么,缓存什么数据,数据传输用什么协议,json仍是protobuffer,怎么写效率高,最高支持多少并发等等,我想这些都是我如今须要考虑的问题,固然这些都须要根据游戏具体的需求来决定的,最终服务器可否高效稳定的运行,都是取决于个人架构是否高效稳定,因此这个过程我要不断学习,不断吸收别人的经验。刚到新公司的时候,我才体会到,本身写代码其实也是一种挑战,整个后端我本身一我的实现,代码是否规范,数据如何存储,都是我说了算,我想个人代码不只要高效,还要让别人看得懂,后来的人能接着个人代码继续写下去。
最后说说Java的题外话,语言之争,从未停过,为何有人拥护Java,有人拥护PHP,有人喜欢C#,有人喜欢C++,各个语言各有各的优点,业余时间,我也了解了很多其余语言,go,node.js我都有了解,我以为go的语言层面支持协程并发以及node.js的异步,都是很适合游戏服务器的,我特别看好node.js,异步io真的是对游戏服务器很好的特性,而且加入对原声js支持的mongo模块也是很方便的(上面我有说到,我相信nosql是很适合存储游戏数据的)。说到游戏行业,我认为h5游戏的发展也是愈来愈快了,上次白鹭的h5开发者生态大会我去了,白鹭的一整套工做流程,以及web vr,真的很使人兴奋(第一轮抽奖我还抽了一个暴风魔镜,哈哈!),另外,大会的模特挺漂亮,哈哈!2015年,互联网行业也略呈降低趋势了,很多创业公司面临倒闭,泡沫经济破灭,由于不少老板抓不住当前经济形势,觉得无论是啥,有个app就是创业了,其实全然不知一款app后面有多少运营模式、盈利模式,就像一句讽刺的话,“我有个绝壁好的idea,能够颠覆bat,什么都不缺,就缺个程序员了,等等,千万别告诉马云!”,哈哈,听到这句话,当时我就笑了,估计好多倒闭的创业公司老板都这么想的吧,他们并不能抓住用户真正的需求,只有抓住用户真正的需求,才会抓住用户的心,真正活下来的,才是用户真正须要的,然而,相对来讲,游戏行业更是复杂多变,或许今天玩家喜欢这种游戏,明天玩家就喜欢另外一种游戏了,就像咱们永远也想不到,flappy bird、围住神经病猫这类的游戏居然能活起来,愚公移山居然也能让h5游戏变为付费的可能。就像一句话,“只要站在风口上,猪也能飞起来!”,只要抓住了玩家此时此刻真正想要的,产品就必定能作起来。
不知不觉,又到晚上了,又要睡觉了,明天还要去加班,游戏开发之路。Java架构之路,我在路上,我是何金成,我喂本身带盐!
以上是我入坑游戏行业这么久的一些我的感觉,可能感悟尚浅,但都是我真实的心里感觉,元旦我再来写一篇技术篇,记录我搭建游戏服务器架构踩过的一些坑。