基本網(wǎng)絡(luò)框架基于IOCP模型,這次主要在以前寫(xiě)的IPC通信的基礎(chǔ)上修改,參考了當(dāng)前項(xiàng)目網(wǎng)絡(luò)庫(kù)的設(shè)計(jì)思路。
先介紹幾個(gè)主要的類:
1.CSocket重新套接字,CConnection繼承CSocket表示一個(gè)連接對(duì)象主要重寫(xiě)Recv和Send接口,以及組包過(guò)程。
2.CAccept處理客戶端的鏈接,
3.Cpacket一個(gè)消息數(shù)據(jù)包頭,CMessage繼承CPacket帶數(shù)據(jù)消息包。
4.CConnectManger保存一個(gè)連接CConnection的內(nèi)存池對(duì)象,CAcceptManager一個(gè)接收客戶端Accept的線程,CPacketManager參考了Loki的小對(duì)象管理做的一個(gè)緩沖區(qū)數(shù)據(jù)包內(nèi)存池。
5.CLibObject包含上面3個(gè)Manager(Singleton),CNetWork網(wǎng)絡(luò)初始化。
6.CIOCP類主要IO的線程類,接收處理所有的客戶端連接CConnection。
7.CServer類包括一個(gè)IOCP初始化和網(wǎng)絡(luò)庫(kù)管理類,IOCP會(huì)把接收到的數(shù)據(jù)重組成數(shù)據(jù)包后保存到CServer的一個(gè)CMsgQueue中.
8.我們的重寫(xiě)一個(gè)Server只需要繼承CServer,然后實(shí)現(xiàn)run和AccedeProcess即可。run從CMsgQueue緩沖區(qū)提取一個(gè)消息包,AccedeProcess處理消息。
一些細(xì)節(jié)設(shè)計(jì):
1.為了節(jié)約帶寬Connection這里采用了Negles算法,這里采用Negle的并沒(méi)有馬上把每一個(gè)需要發(fā)送MSG采用緩存隊(duì)列的方式保存起來(lái),而是每一個(gè)Connection自身都保存數(shù)據(jù),CServer通過(guò)一個(gè)線程把每一個(gè)存在的Connection是否有消息緩存,然后發(fā)送。因而讓IOCP只處理接收的消息,發(fā)送消息通過(guò)CServer來(lái)處理。
出網(wǎng)絡(luò)庫(kù)基本框架如下:
網(wǎng)絡(luò)庫(kù)代碼的代碼http://code.google.com/p/tpgame/source/browse/#svn/trunk/GServerEngine/NetLibrary
問(wèn)題肯定較多,希望多多指教。
最近一直在構(gòu)思與寫(xiě)一套游戲AI系統(tǒng),主要是通過(guò)狀態(tài)機(jī)響應(yīng)事件,更多是想運(yùn)用自己學(xué)習(xí)到的一些優(yōu)秀的算法,以及一些高級(jí)
的AI以此來(lái)鍛煉對(duì)一些復(fù)雜的數(shù)據(jù)結(jié)構(gòu)的編寫(xiě)和設(shè)計(jì)思維的提升。
算法和數(shù)據(jù)結(jié)構(gòu)方面:
1.2D和3D尋路(主要包括2D尋路的初始化條件優(yōu)化 ,3D的空間劃分以及多叉樹(shù)的劃分,以及堆維護(hù))。
2.帶有更多思維的角色系統(tǒng)(附帶更多的數(shù)據(jù)信息)判斷。
3.查詢線段樹(shù)和樹(shù)狀數(shù)數(shù)組的運(yùn)用。
4.一個(gè)線性的字符串過(guò)濾程序。
5.一個(gè)動(dòng)態(tài)基于角色的最優(yōu)二叉查找樹(shù)的動(dòng)態(tài)維護(hù)。(主要解決不同的角色AI觸發(fā)頻率建立一顆最優(yōu)二叉查找樹(shù))
6.追蹤算法以及游戲的群集算法都會(huì)整合到現(xiàn)在的AI系統(tǒng)中。
設(shè)計(jì)方面:
1.盡量讓類之間耦合性更小,復(fù)雜度更低,淺顯明確。
注:Ai系統(tǒng)寫(xiě)完會(huì)把代碼和網(wǎng)絡(luò)庫(kù)的最新代碼更新都會(huì)上傳,希望大家多多指教。