Ghost Cheng “為了暖場(chǎng)”而提出的議題,引發(fā)了大家熱烈討論。
Hi all:
這兩天maillist好像有點(diǎn)冷清了,我來立個(gè)靶子,大家討論一下MMORPG的邏輯層構(gòu)架。
所謂邏輯層構(gòu)架,就是指MMORPG的跑地圖、聊天轉(zhuǎn)發(fā)、好友上線通知、交易事件等,
比如玩家或NPC跑地圖的時(shí)候,以什么樣的方式通知場(chǎng)景周圍的玩家、轉(zhuǎn)發(fā)聊天對(duì)話與好友上線通知的時(shí)候,如何才能盡量不去遍歷玩家鏈表。
先說說我的想法,我處理的方式是基于EventEngine的,所謂EventEngine其實(shí)就是一個(gè)獨(dú)立的線程,維護(hù)一個(gè)Event隊(duì)列,
當(dāng)對(duì)列中有事件的時(shí)候就處理。這里的事件包括:玩家動(dòng)作(移動(dòng)、攻擊)、NPC動(dòng)作(移動(dòng)、攻擊)、聊天、上線、下線等。
當(dāng)數(shù)據(jù)包處理線程,收到玩家上線的數(shù)據(jù)包,就提交一個(gè)事件到隊(duì)列,
同樣,玩家發(fā)來攻擊、聊天的數(shù)據(jù)后,也提交一個(gè)事件到隊(duì)列。
NPC的事件觸發(fā)時(shí)間,由另一個(gè)線程計(jì)算,一旦這個(gè)NPC到了需要移動(dòng)或攻擊的時(shí)候,就提交一個(gè)事件到隊(duì)列。
這樣確保所有的資源,都只有EventEngine一個(gè)線程訪問,比如地圖上的玩家鏈表等。
我遇到的問題:目前主要是聊天、或好友上線,這些事件處理的時(shí)候,需要遍歷整個(gè)玩家鏈表,
這個(gè)鏈表就是網(wǎng)絡(luò)層的session list,訪問的時(shí)候需要鎖定,如果有大量鎖定遍歷的操作,性能感覺會(huì)比較底,
不知道大家有什么好的方案?
希望大家踴躍發(fā)言哦!
http://groups.google.com/group/dev4server/browse_thread/thread/de6320c499f6dc3d/becf3963881399c8#becf3963881399c8