game 角色相关记录

GameServer启动数据库

(role, misc, mail, offline)
从共享内存中加载数据到m_mBlob中
若是共享内存没有则从DB加载oop

主要是修改了同步共享内存,共享内存同步数据库
{//role,misc
getRoleByUid()
内存
map<uint32_t, list<>::iterator> m_map;//管理内存cache
list<pair<uint32_t, Role*>> m_list;ui

blob
mfw::CMemKV m_mBlob;
存储:zlib压缩sdp存储,//管理共享内存线程

共享内存队列


getRoleByUid:
访问内存,若是内存没有,从blob加载出来并放到内存中内存

RoleManager::loop(50ms)
{
1.Role::loop 2s bChanged->serialieze()->setBlobByUid() m_mBlob.set --写入到m_mBlob中,写了共享内存get

2.loop删除的时候若是 bChanged->serialieze()->setBlobByUid()
定时删除不活跃,和根据配置的最小和最大数量删除
}同步

{
BlobRoleManager::loop
BlobMiscManager::loop
将变化的blob放入入库的线程队列中
SyncDbThread
map<string, SyncDataTypePtr> m_mQueueItem;
mfw::CThreadQueue<SyncDataTypePtr> m_dataQueue;
}string

SyncDbThread
{
syncThreadEntry入库线程
从队列m_dataQueue,m_mQueueItem pop出来入库
executeSave 执行入库操做
执行完成以后放入完成队列mfw::CThreadQueue<SyncDataTypePtr> m_finishQueue
}it

loop从完成队列m_finishQueue取出来。。
}

{//mail
BlobMailManager::loop
m_stLruCache.loop 有变化的mail写入m_mBlob

BlobMailManager::getInstance()->startThead//mail入库线程
}

{//offline
BlobOfflineManager::getInstance()->startThead//offline入库线程
}
数据库

GameServer关闭

相关文章
相关标签/搜索