大家好。
我是一个热爱技术的人,从事商业的服务器开发9年多,参与和负责了几款不同类型的游戏开发,包括SNS、ACG和RPG;也负责过IM的开发。我想写一个游戏服务器的序列文章,主要是自己实践的总结。发帖目的是想大家给点意见,怎么写,对须要经验分享的人有效果。我将在业余时间慢慢写,以后将把文章按章节放到我的blog上:http://blog.csdn.net/herm_lib

首先说一下我的写作原则:
1 实践干货
从实践出发,没实践过的,尽量不写。如果一些平时技术学习类的内容,会单独作为章节列出。人非圣贤,必有错,实践的内容不合理,大家指出,表示感谢的同时立马改正。
2 简单平实
介绍的内容不玩虚,能用简单方法实现,绝不用奇淫怪巧的技术,把事情搞复杂化,以显示自己的技术水平。
3 不发明轮子
没有特殊的需求,只用通用API,主要是标准C++库和特定平台的Socket、线程API等。那种重写STL什么绝对不干。
4 内容收敛
就专注写游戏服务器的技术,对一些基础技术,比如面向对象、C++模板、网络基础的API和TCP/IP基础知识之类的不涉及。

写作目标
游戏服务器的新手可以在阅读系列文章之后,可以从事商业项目开发,将序列文章作为参考知道自己该怎么做。而有经验的呢,也可能或可以从文章中得到不一样的实现方法,提升一定的技能。

写作大纲
前言
简单介绍序列文章的组织结构,不同的读者查阅方法等,软件平台约定之类的。这章没什么好说。
1 游戏服务器架构
由简入全的方法介绍分别对应不同的游戏类型服务器架构,不同类型和不同分区方式的服务器架构基本大同小异,我尽量整理出共同点,然后附加说明SNS类游戏需求比较奇葩架构方面处理方法。游戏服务器架构我个人倾向于分接入、逻辑和存储三个层次去实现,实际内容也按这三个层次展开。

2 基础设施服务器
这些服务器完全通用,包括通行证服务器、更新服务器和服务器列表服务器等。

3接入服务器和网络通信模块
讲述为什么要用接入服务器,接着着重花笔墨细讲网络通信模块,在前面的章节的基础上完成一个完整的接入服务器。对了,本文将用到protobuf作为协议消息的encodingdecoding。

4 游戏逻辑-概述和架构设计
这部分涉及内容蛮多的,我打算先说清楚逻辑服务器的架构设计,然后分别简述游戏中都用到的模块。基本上不同类型的游戏都差不多。我设计和实现模块原则就是尽量低耦合,不同模块将非常独立。
逻辑服务器架构设计

5 游戏逻辑-基础设施
数据处理模块
基础逻辑模块
这个主要是一个事件分发的功能,各个逻辑模块相互联系互动的纽带。另外就是游戏对象基础设施。
简单的异步处理机制
写逻辑的时候,我们看不到各种请求处理是异步的,和写同步阻塞代码一样。这个值得大家参考。

6 游戏逻辑-功能模块
开放式空间模块
游戏大世界,大家都可以随便进入的空间。
封闭式空间模块
房间、副本、战场之类的。
角色基础模块
宠物基础模块
单位属性模块
单位动态属性模块
这个上面有区别,动态属性是什么呢? 像角色或者宠物参与战斗或者什么活动,这些属性会变化的,都称为动态属
性。
视野控制模块
背包模块
经常说道具背包,我们要把背包独立出来,做到和道具完全无关。
道具模块
道具可以放在任何地方,常见的就是背包里,也可以在邮件附件中。
任务模块
成就模块
小游戏的成就比较少,可以用和任务一样的代码,成就的行为和自动接受的任务是一样的。但复杂的游戏,成就有很
多,几百上千的,这时候可以参考这里的实现方式。用了优化策略,系统性能损耗基本上和成就个数无关了。
战斗模块
如果是不分区的服务器,这个将会在独立的进程中跑起来。做成分布式。这块将提到一个有趣的系统当机后重启,原
先玩家所在的PVP战场有效性的处理机制。
队伍模块
聊天模块
Buff模块
游戏中,到处都是Buff对象。
技能模块
回合制的和即时的有差别,回合制的比较简单。即时的,像RPG类的技能,实现的时候有一些小讲究,不能实现的太直
接,否则吃CPU有时候比较多一点,要让客户端配合做一点事情。
AI模块
天赋、种族专精类模块
这个专门针对那种你有多少什么点,可以加什么属性值之类的,表现上看起来细节很多,乱七八槽的。在实际项目
中,我用了一点小聪明,代码实现非常简单。要实现什么功能全由策划配数据。如果,比较实诚地去做的话,搞不好就偏
复杂,容易出Bug,容易被作弊。

7 游戏逻辑-进程级的功能模块
这些模块功能比较完整,一个模块对应实现成一个的独立进程。从表面看,进程太多了,提高运维的复杂度。实际上还好,这些进程配置都简单,而且对外提供独立的功能,即使当掉了,也不影响整体游戏体验,最多表现在玩家没法用某个功能了。
好友模块
公会模块
公会模块独立地在一个进程里,如果公会会影响另外一个进程中的战斗Buff,影响玩家的人气值的获取,怎么办?强
制交互是下下策,会让我们代码变复杂,不易维护。这里将会给出比较合理的参考。下面联盟之类也类似。
联盟、血盟模块
邮件模块
商城模块
动态模块
这个基本上借助后面讲到的存储代理实现掉。

8. Cache和存储
存储包括存储前端的Cache和后端的数据落地。我们将简述一个通用的存储代理,然后把数据写到MySQL。MySQL只做为数据落地的工具,不做其他用途。这一章将涉及LRU什么的;一些分布式的常识,比如简单Hash映射、一致性Hash;同时借助反射的机制实现通用的数据Cache和存储系统。
概述和架构设计
实现

大纲写完了。有兴趣的同学们请提意见,谢谢。
email: daemon.huang@gmail.com











锐亚教育

锐亚教育,游戏开发论坛|游戏制作人|游戏策划|游戏开发|独立游戏|游戏产业|游戏研发|游戏运营| unity|unity3d|unity3d官网|unity3d 教程|金融帝国3|8k8k8k|mcafee8.5i|游戏蛮牛|蛮牛 unity|蛮牛