分享

拿到一套游戏服务端源码,该从哪看起?

 勤奋不止 2019-07-31
 开发游戏服务端,经常要接触一套全新的游戏代码。接触新代码贯穿于整个工作生涯,比如,作为刚入职的新人,要去熟悉项目代码,尽快上手工作;调到一个新的项目组工作时,要熟悉已有代码;给项目组做技术指导时,也需要了解原有的写法。

然而看懂一套自己并不熟悉的代码并不容易。其一是时间有限,工作中往往要求能够快速上手;其二是新代码往往包含自己一些知识盲区,需要学习。于是编写此文,总结一套看代码的方法和流程,以供参考。

第一步:看角色逻辑的编写方式

游戏服务端的最核心功能就是处理玩家逻辑,可以先从单服的逻辑看起。比如看看背包模块、签到模块的编写方式,从而理解游戏的逻辑组织。

一般而言,玩家逻辑会涉及如下图的几个部分,看代码时可以按照模块生命周期的流程跟着。当玩家上线时,需要加载数据;然后处理客户端协议;下线前需要保存数据。按照这个顺序,看看每个步骤的写法。


看过几个模块后,便可以仿写一些简单的功能逻辑。对游戏公司,这也是培养新人时,前期的要求。

第二步:看玩家上线到下线的整个流程

玩家从连接服务端,到他退出游戏,中间一般会经历如下图的流程。

(图片来源,《Unity3D网络游戏实战(第2版)》第七章通用服务端框架)

跟完这个流程,基本可以明白整个服务端的逻辑架构。比如有些游戏服务端在gateway中处理连接,然后交由login服处理登录,再交给game服处理游戏逻辑,可能还会有db服处理数据库的读取。那么,一步步的跟进这个流程,就能够把服务端各个部分的职能给联系起来,也能够解决一些游戏流程的问题。

第三步:看战斗逻辑的实现

游戏中的一些核心功能,比如地图、战斗往往较为复杂,还可能涉及跨服。看这部分代码的目的是从之前只能开发一些简单的通用功能,扩展到能够开发核心功能。

举例来说,比如某款游戏的战斗流程可能如下图。当玩家进入匹配时,游戏服会把玩家的一些信息发到匹配服去做匹配;当匹配成功,服务端会创建一个战斗服,然后参与战斗的各个玩家切到战斗服去战斗。


那么要关注的地方就有各个服务的职能是什么,它们间的数据传输流程,以及传输了哪些数据。进而还需要了解角色在战斗服中的逻辑,比如战斗开始、战斗结束的处理,放技能伤害的计算。

第四步:技术实现细节

游戏服务端涉及的内容其实很多,在按照以上三个步骤看代码后,基本就能够在这套代码的基础上做开发。但如果要修改一些底层功能,或者做性能优化,就要更加深入的看代码。

一般而言,以下的三个模块是重点,可以优先了解。


网络作为服务端的重点模块,可以了解该框架采用什么方式处理多路连接,了解协议的设计。磁盘IO可能会是服务端的性能瓶颈,一般会通过缓存机制来缓解,要了解服务端的存储结构,知道保存着什么数据以及怎样保存。手游很注重热更新功能,作为保持服务器稳定的一个重要手段,但做好热更新并不容易,可以了解框架的热更方案。

经由以上几步,应能够了解一套服务端代码,能在它的基础上编写逻辑,改动底层功能。

作者:罗培羽

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多