玩家数据的修改
1、玩家发来的事件处理完完成后,
2、会保存玩家的UID(map《int64, bool》 m_mapUserSave)(表示这个玩家更新了数据),
3、保存玩家数据
3.1然后去从hash_map 《int64, User*》 & mapUsers找到玩家的数据,进行保存
3.2清除第二步中的玩家信息。
4、保存完成后,
添加该玩家的uid到清除容器中map《int64,bool》 m_mapUserRemove,目的是假设清除改玩家的数据
玩家数据的删除
遍历上述第4部中的假设需要清除的玩家UID,
判断真正是否需要删除玩家数据
判断的条件有,
1、所有玩家信息中hash_map《int64, User*》 & mapUsers没有找到该玩家 ,或者改玩家指针为NULL,那么就进行删除
2、找到玩家信息后,发现在线(bool falge)那么不会删除
3、不在线,并且玩家有需要保存的数据,那么就不会删除
4、不在线,并且玩家没有要保存的数据,并且未到删除的时间(玩家的事件处理完毕后,设会记录时间戳,如果这段时间玩家掉线,不会删除玩家数据,以便于玩家网络不好频繁连接游戏时,可以像没有掉线一样重新获得数据,如果删除数据,那么会冲重新加载玩家数据,比较耗时,游戏体验很差)
活动数据的增删该查
我司的数据采用key—value的形式进行保存,
程序启动时,会加载数据,保存到容器当中,
1、当有新增或者删除数据时。
1.1会修改容器中的数据
1.2 同时更新到数据库
数据库的更新机制,采用定时更新,而不是马上更新,这样可以均匀的保存,不至于同一时间需要保存很多数据,反正有信号机制保证服务器在挂掉的时候,进行保存。
2、当有查询数据时,直接从容器中查找,而不是从数据库中查找,这样做的目的是,从容器中查找,一般是map中查找非常迅速,并且容器中的数据和数据库中的数据是一样的。
玩家的保存和删除都是放入到定时中处理的。