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