分发框架管理一个树状的Handlers,Handler分为通用的(general)和专有的(specific)。通用的Handler是为所有的对象服务;专有的Handler是为某个对象服务(常见的是Role)。框架结构描述如下:
cmd1----->handlers
cmd2----->handlers
cmdN----->handlers
+------->cmd1------>handlers
|
oid1--------------+-------->cmd2------>handlers
|
+--------->cmd3----->handlers
oid2----......
这里以网络消息为例,说明统一框架是如何分发一个消息的。前提是各种外部对象将oid-type-handler注册到分发器中。
1. 得到一条消息,得到object id和消息command。
2. 在general handlers中,查看command是否有对应的Handlers,有的话,调用Handler的接口。
3. 根据object id定位到该object的specific的Handlers,有的话,调用Handler的接口。
这是一个很简单的东西,看似没什么用。他的作用巨大,实际开发中大大简化了消息处理流程,消除了程序耦合度。
这个东西是由Herm base库提供,应用程序可以独立地使用。Herm framework也使用这个分发器分发消息。framework中是一个session维护一个分发器。
简单说一下不通的服务器使用分发器的区别。网游服务器一般有接入服务器和逻辑服务器。接入服务器管理多个session,收到消息后,将不同的session的消息合成一个session发给逻辑服务器,也就说逻辑服务器就一个session。接入服务器将specific handlers个数全设成0;逻辑服务器得到消息后一般须有借助specific handlers将消息分发给真正的处理对象。