java游戏服务器开发有前途吗?
说说我之前的经历吧。大四的时候学校安排来北京培训java(培训的时候没有丢人,出来找工作也是用的真实的学位和背景,不像某峰互联网)。然后去了培训机构推荐的公司实习。当时工资2k,但是工作很开心,从前辈身上学到了很多东西。当时我在微信官方账号开发微信,跟着前辈做微信后台开发。当时我用的是SpringMVC+MyBatis框架。刚接触的时候,学了很久才懂。后来,我想了想。这其实很简单。对于逻辑开发的程序员来说,你只需要了解工作流程,如何跳转页面,如何将值传递给跳转,如何处理数据。这些就够了。当然,我是一个不满足的人。我会找出我为什么用这个框架,为什么不用别的。带着这些问题,我会尝试搭建自己的后台框架(虽然前期大部分都是复制粘贴)。除了框架部分,微信的高级界面也是我研究的重点。我会去官方文档看看微信是怎么接入的,然后研究一下前辈们的代码是怎么写的。所谓做一件事,爱一件事,大概就是这样。当时我觉得微信的发展很有前景,我们公司用的框架也是最先进的。(后来看来,这个框架组合确实是目前最流行的框架,而且当时微信微信官方账号也确实是当时最流行的框架。
说了这么多,为什么后来转行打游戏了?其实当时在第一家公司,我的主管就打算辞职,不带走整个底层技术,没有实习生。一两个月,实习生无所事事。对我来说,这样生活太无聊了。我喜欢挑战,于是投了简历,找了新的实习,在一家游戏公司开发java服务器。公司挺大的。几年前,我以一款slg页游称霸游戏界(我不会说什么游戏,但我会知道我说的是什么公司)。后来游戏行业发展到手游,这个slg也出了手游版。这个游戏几乎支撑了整个公司。加上后来出的几款手游,公司发展的很好。我实习的部门是一个mmorpg手游,已经从实习转正近一年了。不过这款rpg手游的数据并不是很好。第一次第二天预定23,第二次26(现在这个公司的游戏可以预定80多天),第七天就更不用说了。我也能感觉到,作为一款mmo游戏,玩家之间的互动太少了。从一开始我就觉得这是一款单机游戏,已经失去了mmo的本质。项目组在准备第三次封测的时候,有很多原因,不仅仅是游戏数据不好,还有一些个人原因。但说实话,是这家公司把我带入了游戏行业。我非常感激。我觉得游戏行业是一个很有前景的行业,甚至比我之前认为最好的微信开发还要好。游戏行业很赚钱。我能感觉到规划文件里全是挖坑预留的收费点。这一块可以正常玩,但是如果收费的话,网游最重要的就是控制平民玩家和普通玩家的比例,以及游戏的平衡性(当我意识到公司的游戏这么刻意的想赚钱的时候,我突然明白了为什么公司的游戏大部分都是腾讯代理的,为什么事实证明腾讯控股没钱陪你玩* *,哈哈)。也可以看出,游戏的商业化让游戏公司进入了一个固定的模式——无条件洗钱,我认为已经失去了游戏的本质。看了一本叫《舞蹈学院》的书(当时在cocos2014开发者大会上买的。书已经送人了,但是我看了一大半的内容,从游戏的产生,到玩家的心理,到为什么需要游戏。这本书讲的很好(我觉得游戏策划应该看这本书,玩良心游戏,拒绝盲目骗钱)。啊,突然发现这一段有点偏颇。毕竟我只开发游戏服务器,改变不了游戏行业。我只需要做我该做的。其实大的游戏公司应该走这种商业路线,用几款长寿命的游戏来支撑公司的流水。
转行做游戏后,我觉得游戏开发比web开发有趣多了,当然技术难度也比web开发高多了。之前发了一个关于网页开发和游戏开发区别的讨论,/content/wendetail/7082370,我又把我的回答贴上了(其实是有人让我在他的号上回答的,所以我自己回答了):
1.从第三方支持来看,web后台有很多成熟的第三方框架。开发人员不需要关心底层控制器跳转的实现,只需要一个或几个配置文件就可以完成核心控制器部分,而开发人员只需要关注web本身的业务逻辑,将逻辑与框架集成即可。使用该框架一方面简化了控制层代码,另一方面很好地实现了业务逻辑的分层。在游戏的后台开发中,由于各种游戏的需求差异很大,从网络层到业务逻辑层,各个方面都要根据自己的游戏需求搭建自己的框架,所以很难从一些共性的东西中提炼出一个成熟的框架,游戏的后台开发基本上都需要搭建自己的框架。
2.从业务逻辑层面来说,web后台的逻辑基本相同。也许这个系统稍加修改就可以被另一个系统使用,但是游戏就不一样了。每个游戏都有自己的特点,根据不同的策划需求实现了不同的逻辑,但也有一些共同的模块,但整体差异还是很大的。
3.从数据持久性来看,web上的数据基本上是非常有规律的,表与表之间的关系非常清晰,以后也不会有太大的变化。但是游戏中的数据是多样的,服务开通后数据的变化也是多样的。即使是传统的关系数据库也完全不能满足游戏数据持久化的需求,游戏中有很多状态和数据需要服务器保存。个人认为在游戏开发上,nosql比。
4.从通信层来说,web中的用户都是独立的个体,游戏是多人在线的游戏世界。在这个游戏世界中,玩家之间需要进行互动,这就需要服务器实时向所有在线玩家广播消息,这就消耗了服务器的性能。这方面游戏后台做的处理比web多,游戏服务器是IO密集型的服务器类型。
以上是我当时的回答。或许我的看法还是比较浅薄的。毕竟我做游戏不到一年,但后台开发还是有点发言权的。实习游戏发展至今,经历了一个蜕变的过程,几乎是一个从无到有的学习过程,从mina框架到protobuffer。web开发我相信很少接触(mina是一个网络通信框架,web里面几乎只有ty,如何在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背后有多少运营模式和盈利模式,就像一句讽刺的话,“我有一个很棒的想法,可以颠覆bat,什么都缺。哈哈,我当时听到这句话就笑了。估计很多倒闭的创业公司老板都是这么想的。他们抓不住用户的真实需求。只有抓住了用户的真实需求,才会抓住用户的心。真正活下来的才是用户真正需要的。但是,游戏行业相对复杂多变。可能今天玩家喜欢这个游戏,明天就会喜欢另一个游戏,就像我们一直想的那样。就像一句话,“只要站在风口上,猪都能飞起来!”“只要你抓住了玩家此时此刻真正想要的是什么,产品就一定会做出来。