游戏服务器的若干关键模块

来源:互联网 发布:windows phone安装apk 编辑:程序博客网 时间:2024/05/17 04:32

一个(或一组)完备的服务器程序,除了具备良好的架构外,各个关键模块决定了一个服务器的命运。对于一个系统的理解因人而异,下面所列的内容仅仅是一些条目,在您的系统中可能一个模块是由下面数个条目构成的。

1、资源及内存管理模块。无需多说,“一切都是资源”,你的数据都在内存中。通常对于一个服务器来说为了稳定运行于7x24,内存管理是关键,再加上若干的“插件”,内存管理不是一项“简单任务”,诸如安全访问策略、内存碎片整理、资源安全回收等等都是必备的特性。

2、异步/同步数据I/O模块。网络、文件都是I/O,只有高效的I/O才能保证整个服务器的工作效率,这方面能用的技术很多,比如每个开发人员都知道的“数据缓冲”技术、I/O多路复用技术等等。

3、数据安全模块。包括并发数据安全和网络数据安全。并发这个主题太多人讨论了,说一千道一万,你需要的就是一套久经“沙场”的并发体系,没有相当的实践经验不建议自己去写并发框架,这样做真的很“蠢”。而网络数据安全通常会相对简单一些,达到一些基础的安全性能指标就可以,因为网络安全不是一个(或一组)服务器程序就能完全解决得了的,比如链路加密、连接限制、流量控制等等,这些基础的安全策略是必须实现的。

4、数据库交互模块。就是和各种数据库打交道,将数据进行持久、存储,顺便提一下对于数据库的设计,可以学学日本工程师的做法,另外就是我个人的观点:内存中的数据永远比数据库快很多,但是不是什么数据都适合放到内存中的。

5、游戏逻辑实体模块。一般的,就是所谓的“开发包”模块。用这个模块编写游戏的逻辑,调用各种脚本。

6、插件模块。对基础功能的扩展,因系统而异,不可缺少。

上面的各个模块不是一个服务器的全部模块,是最基础的模块,也是互相关联的模块。在一些系统里,服务器架构比较灵活,所以模块都可以按照插件方式进行开发,这种的方式比较流行,因为大家认为这样更“人性化”,可以随意拆卸、变更过时的插件,这就要求核心框架足够的健壮,为了保证系统安全,开发人员就必须遵守相关的开发原则,比如线程使用原则、对象池使用原则等等。

就个人的感受而言,过多的插件必然导致系统安全性和可用性的下降,再强大的核心也应付不了众多的插件,而且不要期望所有的开发人员都清楚如何正确处理线程并发、如何正确使用对象池、如何正确地在框架中释放自己的数据,所以应当适当的将模块进行整合和合并。如果一个模块完成了过多的功能,那就应该将模块进行拆解。一个架构师真正的功力就体现在这些细节上,优秀的架构师架构的系统会让你觉得很清爽、很舒服,使用起来很高效、很安全,但是没有设计完美的系统,找到适合自己项目的设计才是王道。

最后,从工程角度看,游戏服务器往往不是一个程序就搞定的,可能是很多程序在一起共同完成,比如有安全管理服务器、连接服务器、逻辑服务器、网络差速转换服务器、内容发布支持服务器等等。不管什么服务器,最好都使用相同的架构,一个好的构架足够应付这些需求了,这好像是句废话,但是我见过一些公司同一个项目使用了很多架构和框架,可谓是五花八门,我很有兴趣知道他们的技术经理是怎么管理的。