一. 网络通信:
- 通信模块
- 协议制定
- 协议加解密
- 协议处理队列
游戏服务器开发,首先要了解的就是网络层框架,网络层负责接受处理协议(协议即为用于通知服务器玩家所做的操作的约定格式),根据情况自定义协议格式.比如{版本号:XXX,操作类型:XXX,操作参数:XXX}
通信常用的框架有netty,mina等.
服务器接收到协议会根据不同的协议内容进行处理,大多数游戏服务器采取的都是防御式编程,即对客户端的参数一一校验,这样可以避免因玩家篡改协议对服务器造成的危害.
由于服务器一般为多线程环境,接收到的协议会发生同时处理的情况,因此大多会将同一个玩家的协议作为队列去顺序处理,省去了加锁的数据同步判断,但涉及到更改别的玩家数据还是要有同步判断避免出现脏数据
二. 持久层(包括redis):
- 持久化框架
- 布隆过滤器
- 储存过程
- redis封装常用命令
- redis发布订阅框架
持久层负责保存玩家数据,因此数据持久化是游戏服务器众多模块中极为重要的一环,常用的数据库mysql,mariadb(mysql被收购后有闭源的风险,因此另起分支开发了mariadb).
持久层的作用不仅仅是保存玩家数据,也要保护自身以提供持久的服务,一些恶意玩家常常会伪装协议,而协议中的数据往往是不存在的,高频的发送此类协议会造成数据库带宽占用,而查询结果当然也是不存在的,因此可以使用布隆过滤器过滤掉一定不存在的数据请求,对数据库连接起到一定的保护作用.
了解储存过程和redis常用命令以及发布订阅即可,现成的封装上手即用,redis也可以作为持久层使用,需要了解redis的持久化机制(RDB,AOF)
三. 缓存:
- 玩家业务缓存
- 基础数据缓存
- 缓存击穿处理
- 持久化策略
单单持久层的qps是满足不了超大并发量的访问的,通常数据库的qps不超过3000,如果瞬间请求超过处理能力,会造成数据库过多请求积压,从而处理速度变慢甚至线程阻塞,最后导致数据库服务崩溃,所以需要引入缓存模块给数据库减压,同时还可解决一些脏数据的问题,
线程模型:
- IO线程
- 逻辑线程
- redis线程
- 缓慢线程
- 工作轮询线程
定时JOB:
- 零点刷新
- 增删JOB框架
全局异常处理:
- 处理自定义异常
- 异常上报
业务日志:
- 记录日志
- 埋点分析
GOIS:
1.指令集
常用linux命令:
1.指令集