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

