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關閉