我主要是為了看原始碼,實現,所以後續的部落格,我應該都主要寫自己的原始碼閱讀情況了~
登入時序圖
先貼上一張新賬號登入的時序圖。
流程分析
一次登陸請求,從客戶端發起,到伺服器響應,涉及到至少5個程序間的互動通訊。
pendingloginmgr::plinfos* ptinfos = pendingloginmgr_.find(loginname);
if(ptinfos != null)
ptinfos = new pendingloginmgr::plinfos;
ptinfos->ctype = ctype;
ptinfos->datas = datas;
ptinfos->accountname = loginname;
ptinfos->password = password;
ptinfos->addr = pchannel->addr();
ptinfos->forceinternallogin = forceinternallogin;
pendingloginmgr_.add(ptinfos);
將使用者資訊傳送給dbmgr,進行賬號有效性驗證
dbmgr主要是根據賬號從資料庫中查詢賬號資訊,由於sql的互動通常比較慢,如果在主線程同步等待sql返回,會嚴重影響dbmgr程序的處理效率。這部分cbe採用的是多執行緒處理,它維護了乙個名為pthreadpoolmaps_的執行緒池,關於執行緒池和sql的具體操作在後續單獨文章裡面再寫。這裡dbmgr會建立乙個dbtaskaccountlogin的task物件,並把這個task丟到執行緒池中去跑。
具體**可以參考dbmgr::onaccountlogin和inte***ceshandler_dbmgr::loginaccount。
bool inte***ceshandler_dbmgr::loginaccount(network::channel* pchannel,
std::string& loginname,
std::string& password,
std::string& datas)
)!\n",
dbinte***cename));
return false;
}pthreadpool->addtask(new dbtaskaccountlogin(pchannel->addr(),
loginname, loginname, password, server_success, datas, datas, true));
return true;
}
q2: 在坦克大戰demo中,為啥不需要角色賬號建立?
這個原因就在於db查詢賬號這一步,cbe允許在配置了自動建立賬號的情況下,對於乙個新賬號,會自動進行賬號資料的建立,具體**如下:
bool dbtaskaccountlogin::db_thread_process()
] is error!\n",
accountname_));
retcode_ = server_err_db;
return false;
}info_msg(fmt::format("dbtaskaccountlogin::db_thread_process(): not found account[{}], autocreate successfully!\n",
accountname_));
info.password = kbe_md5::getdigest(password_.data(), (int)password_.length());
}else
], login failed!\n",
accountname_));
retcode_ = server_err_not_found_account;
return false;
}return false;
}
KBEngine簡單RPG Demo原始碼解析 2
七 服務端資產庫資料夾結構 public void createaccount 複製 外掛程式的主迴圈處理函式 public virtual void process 複製 public void createaccount string username,string password else ...
原始碼剖析 Hashtable 原始碼剖析
hashtable同樣是基於雜湊表實現的,同樣每個元素都是key value對,其內部也是通過單鏈表解決衝突問題,容量不足 超過了閾值 時,同樣會自動增長。hashtable也是jdk1.0引入的類,是執行緒安全的,能用於多執行緒環境中。hashtable同樣實現了serializable介面,它支...
《STL原始碼剖析》筆記 1
第一章 stl概論與版本簡介 一 臨時物件的產生與運用。p36 這裡的臨時物件,指的是一種無名物件 unnamed subjects 如果它們的產生不在程式設計師的預料之下,往往造成效率的負擔,但有時刻意製造臨時物件會讓程式乾淨清爽。刻意製造臨時物件的方法是,在型別名稱後直接加一對小括號,並可指定初...