开发游戏服务端,经常要接触一套全新的游戏代码。接触新代码贯穿于整个工作生涯,比如,作为刚入职的新人,要去熟悉项目代码,尽快上手工作;调到一个新的项目组工作时,要熟悉已有代码;给项目组做技术指导时,也需要了解原有的写法。
然而看懂一套自己并不熟悉的代码并不容易。其一是时间有限,工作中往往要求能够快速上手;其二是新代码往往包含自己一些知识盲区,需要学习。于是编写此文,总结一套看代码的方法和流程,以供参考。
第一步:看角色逻辑的编写方式
游戏服务端的最核心功能就是处理玩家逻辑,可以先从单服的逻辑看起。比如看看背包模块、签到模块的编写方式,从而理解游戏的逻辑组织。
一般而言,玩家逻辑会涉及如下图的几个部分,看代码时可以按照模块生命周期的流程跟着。当玩家上线时,需要加载数据;然后处理客户端协议;下线前需要保存数据。按照这个顺序,看看每个步骤的写法。
看过几个模块后,便可以仿写一些简单的功能逻辑。对游戏公司,这也是培养新人时,前期的要求。
第二步:看玩家上线到下线的整个流程
玩家从连接服务端,到他退出游戏,中间一般会经历如下图的流程。
(图片来源,《Unity3D网络游戏实战(第2版)》第七章通用服务端框架)
跟完这个流程,基本可以明白整个服务端的逻辑架构。比如有些游戏服务端在gateway中处理连接,然后交由login服处理登录,再交给game服处理游戏逻辑,可能还会有db服处理数据库的读取。那么,一步步的跟进这个流程,就能够把服务端各个部分的职能给联系起来,也能够解决一些游戏流程的问题。
第三步:看战斗逻辑的实现
游戏中的一些核心功能,比如地图、战斗往往较为复杂,还可能涉及跨服。看这部分代码的目的是从之前只能开发一些简单的通用功能,扩展到能够开发核心功能。
举例来说,比如某款游戏的战斗流程可能如下图。当玩家进入匹配时,游戏服会把玩家的一些信息发到匹配服去做匹配;当匹配成功,服务端会创建一个战斗服,然后参与战斗的各个玩家切到战斗服去战斗。
那么要关注的地方就有各个服务的职能是什么,它们间的数据传输流程,以及传输了哪些数据。进而还需要了解角色在战斗服中的逻辑,比如战斗开始、战斗结束的处理,放技能伤害的计算。
第四步:技术实现细节
游戏服务端涉及的内容其实很多,在按照以上三个步骤看代码后,基本就能够在这套代码的基础上做开发。但如果要修改一些底层功能,或者做性能优化,就要更加深入的看代码。
一般而言,以下的三个模块是重点,可以优先了解。
网络作为服务端的重点模块,可以了解该框架采用什么方式处理多路连接,了解协议的设计。磁盘IO可能会是服务端的性能瓶颈,一般会通过缓存机制来缓解,要了解服务端的存储结构,知道保存着什么数据以及怎样保存。手游很注重热更新功能,作为保持服务器稳定的一个重要手段,但做好热更新并不容易,可以了解框架的热更方案。
经由以上几步,应能够了解一套服务端代码,能在它的基础上编写逻辑,改动底层功能。
作者:罗培羽
|