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