用skynet写服务器一年有余,在业务逻辑层面已经基本能掌握一个游戏服务器的系统设计。但是我认为,写游戏服务器是一个要求比较高的工作,因为到了线上,任何小小的错误都可能造成重大的问题。这就要求对服务器的底层设计、数据库等有比较深刻的理解。所以最近开始尝试去阅读skynet的源码,希望能借此让自己实现 客户端+服务器+客户端引擎+服务器引擎全栈。
skynet的源码代码量不算特别大,C代码部分是核心实现,大概不到1W行代码。读一遍代码不是很困难,但是要理解其中的设计,需要反复的读代码、读文档。skynet不是细节都会有文档说明,代码本身的注释也较少。如果要更深入的理解skynet,需要动手做实验分析。目前比较感兴趣的skynet模块,也是skynet的核心模块包括:网络模块、服务调度模块、数据库模块。感兴趣的原因主要有两点,一是这些是skynet的核心模块,另外一点这些模块也是服务器的核心底层。由于之前没有接触过太多网络相关的编程,在对skynet使用的一些底层函数库的理解上有一定困难。虽然现在能大概理解skynet的整体设计以及代码流程,但是要进一步理解一些细节的设计,需要对代码段进行仔细的琢磨。
后面准备从两个方向加强对skynet底层的理解,首先继续阅读代码,这个做起来比较方便,目前阶段还能继续提高对源码的理解;另外一方面,开始通过给skynet打log、或者拆分代码出来自己动手做实验来理解更细节的设计。