游戏的服务器是如何运作的(为什么游戏服务端的入门难度高)
游戏的服务器是如何运作的(为什么游戏服务端的入门难度高)经常能听说某某策划自学技术自己做了个好玩的单机游戏出来,但较少听说谁自学服务端做的很好的。除了就算做出来也无法直接拿给别人看的原因外,过长的学习流程是导致自学不易的主因。如下图,要做好服务端开发,可能要先学socket、学网络协议,再由此基础搭建服务端,然后实现各种功能。为什么不容易自学从技术角度,入门服务端的难点在于需要跨越较多的技术层次。以下是服务端程序的一种分层,这里我把它分层6层。实际项目中往往某些层的内容较少,不会单独分出来,但逻辑上的分层大体相似。这6层分别是①基础层②核心层③框架层④逻辑底层⑤逻辑中间层⑥逻辑上层,各层的内容如下:①基础层数学库、数据结构、缓冲区、字符串处理、Json等
文/ 罗培羽
经常能听说某某策划自学技术然后把单机游戏做出来,但很少听说谁自己做了个网游,除了工作量大之外,服务端的门槛是原因之一。
比起游戏客户端,游戏服务端的入门难度较高。原因在于,其一,客户端引擎和工具相对完善和统一,学习资料众多,而服务端至今没有较强大的方案,都是各个项目自己的一套,且很多缺乏文档;其二,犯错的风险较大,特别是对于线上游戏,出bug的危害要比客户端bug大一些;其三,服务端开发涉及到的技术领域较多,又不直观,加大了开发难度。
跨越层次多,导致知识盲区大
从技术角度,入门服务端的难点在于需要跨越较多的技术层次。以下是服务端程序的一种分层,这里我把它分层6层。实际项目中往往某些层的内容较少,不会单独分出来,但逻辑上的分层大体相似。这6层分别是①基础层②核心层③框架层④逻辑底层⑤逻辑中间层⑥逻辑上层,各层的内容如下:
①基础层
数学库、数据结构、缓冲区、字符串处理、Json等
为什么不容易自学
经常能听说某某策划自学技术自己做了个好玩的单机游戏出来,但较少听说谁自学服务端做的很好的。除了就算做出来也无法直接拿给别人看的原因外,过长的学习流程是导致自学不易的主因。如下图,要做好服务端开发,可能要先学socket、学网络协议,再由此基础搭建服务端,然后实现各种功能。
但是核心层的知识,比如网络、数据库,包含的内容比较多,而且如果要做到高效率、不出错,需要学习很多内容。比如网络,先丢几本书,很厚。
比如数据库,再丢一本书,还是很厚。
这就导致了学习的流程很长。以看书学习为例,如果学客户端,可能看到第一章就能做个五子棋,看到第二章就能做个贪食蛇,以此类推,每一步都能出点成果。而如果看服务端的,那就完了,可能先啃个200页的基础,啥都做不出来,等看到300页才做个很基础的,这对自学是非常打击的。
游戏公司怎样培养人新人
如果是比较成熟的游戏公司,会有一套带新人的体系。一般而言,会从业务需求出发,先让新人接触简单的业务逻辑,再逐步涉及复杂的业务,当熟悉业务后可能会尝试一些改动框架底层的任务,以提升技术水平。这样每次学习基本只需学习一个层次的知识,减少了难度。
如下图,在一开始时接触较为简单的业务,那么只需仿照逻辑中层的已有代码,稍微熟悉支撑它的逻辑底层即可。对于复杂的核心层、框架层无需学会,减少了入门难度。
但也由于业务层不太涉及核心层和基础层,某些公司不太注重长期的人才培养,仅培养到“能开发业务”这层就停止。对于新人,核心层与基础就要靠自己学习。业务层的编写更多是模仿能力,仿照已有的代码改动,而核心层会涉及一些底层的知识。
对比于从基础开始的自学,公司培养模式的学习曲线如下图的橙色线,学习一点就能出一点输出。而自学曲线如蓝色线,要花上较长时间才有输出。
另一方面,某些游戏公司会给程序员评级,比如从初级程序、核心程序一直到行业专家。
其中一种等级划分方法是根据能够解决问题的范围而定。如下图,具体来说能够解决部分业务问题的是初级程序员,能够解决所有业务问题的是核心程序员,能够解决所有技术问题的是副主程,能够在解决所有技术问题并能够管理团队的是主程,能解决任何问题的是行业专家。
尽管要2年后才动笔,作为后续服务端书籍的调研,一套好的教程应当有好的流程,从游戏公司的培养模式上汲取经验,能够让读者看一点就能输出一点成果,尽量避免看到最后才能做点东西。另,笔者的《Unity3D网络游戏实战(第二版)》详解了一套简易服务端的实现,欢迎关注。