《魔灵保卫者》这款游戏的服务端,架构如下图:
协议处理流程
1.通信层接收客户端的请求,通过协议号定位到业务层的处理类
2.业务层执行相应的协议逻辑,数据变动提交给数据层,到这里就返回响应客户端了
3.数据层定时同步变动数据到数据库
登陆流程
1.客户端登陆平台
2.客户端拿到区服列表
3.客户端选择区服请求登陆游服
4.游服请求登陆验证服
5.登陆验证服请求平台验证
充值流程
1.客户端想平台请求充值
2.平台回调充值服
3.充值服回调游服
具体实现
1.网络通信
设计通信协议,基于Netty做封装,通过自定义Annotation 定位业务层的处理器,业务层只需关心逻辑实现,不用关心网络发送接收
2.数据存储
基于tomcat-jdbc.,dbutils 做封装,实现业务层无sql,只需操作对象,数据层自动生成SQL存储
实现异步存储,数据的变动会先保存在ConcurrentLinkedQueue 中,每几分钟会从队列拿出然后经过优化后批量存储
3.无锁并发
通过对象的 deep copy 实现业务层的无锁开发(类比svn),提供OptimisticLockException异常来实现业务重做
4.事务
通过ThreadLocal技术将变动对象保存在当前业务处理线程,在协议处理最后commit到数据层的主缓存,要么全部提交成功,要么全部放弃,以此保证事务
5.存储结构
将要存储的数据对象通过 fastjson 序列化成字节数组存储到mysql的 blobdata中,这样加减字段数据库表无需任何变动
6.对象
以模块划分,每个模块会有多个handler对象,每一个handler对应一个具体协议处理逻辑。每个模块对应一个service提供公共服务。其他的还会有数据表对象entity,静态配置对象resource等对象,每个对象职责清晰.