摘要: 本文作为游戏服务器端开发的基本大纲,是游戏实践开发中的总结。第一部分专业基础,用于指导招聘和实习考核, 第二部分游戏入门,讲述游戏服务器端开发的基本要点,第三部分服务端架构,介绍架构设计中的一些基本原则。希望能帮到大家
一 专业基础
1.1 网络
- 1.1.1 理解TCP/IP协议
- 网络传输模型
- 滑动窗口技术
- 建立连接的三次握手与断开连接的四次握手
- 连接建立与断开过程中的各种状态
- TCP/IP协议的传输效率
- 思考
- 1)请解释DOS攻击与DRDOS攻击的基本原理
- 2)一个100Byte数据包,精简到50Byte, 其传输效率提高了50%
- 3)TIMEWAIT状态怎么解释?
- 1.1.2 掌握常用的网络通信模型
- Select
- Epoll,边缘触发与平台出发点区别与应用
- Select与Epoll的区别及应用
- 1.2 存储
- 计算机系统存储体系
- 程序运行时的内存结构
- 计算机文件系统,页表结构
- 内存池与对象池的实现原理,应用场景与区别
- 关系数据库MySQL的使用
- 共享内存
- 1.3 程序
- 对C/C++语言有较深的理解
- 深刻理解接口,封装与多态,并且有实践经验
- 深刻理解常用的数据结构:数组,链表,二叉树,哈希表
- 熟悉常用的算法及相关复杂度:冒泡排序,快速排序
二 游戏开发入门
- 2.1防御式编程
- 不要相信客户端数据,一定要检验。作为服务器端你无法确定你的客户端是谁,你也不能假定它是善意的,请做好自我保护。(这是判断一个服务器端程序员是否入门的基本标准)
- 务必对于函数的传人参数和返回值进行合法性判断,内部子系统,功能模块之间不要太过信任,要求低耦合,高内聚
- 插件式的模块设计,模块功能的健壮性应该是内建的,尽量减少模块间耦合
- 2.2 设计模式
- 道法自然。不要迷信,迷恋设计模式,更不要生搬硬套
- 简化,简化,再简化,用最简单的办法解决问题
- 借大宝一句话:设计本天成,妙手偶得之
- 2.3 网络模型
- 自造轮子: Select, Epoll, Epoll一定比Select高效吗?
- 开源框架: Libevent, libev, ACE
- 2.4 数据持久化
- 自定义文件存储,如《梦幻西游》
- 关系数据库: MySQL
- NO-SQL数据库: MongoDB
选择存储系统要考虑到因素:稳定性,性能,可扩展性
- 2.5 内存管理
- 使用内存池和对象池,禁止运行期间动态分配内存
- 对于输入输出的指针参数,严格检查,宁滥勿缺
- 写内存保护。使用带内存保护的函数(strncpy, memcpy, snprintf, vsnprintf等),严防数组下标越界
- 防止读内存溢出,确保字符串以’