[源]
http://zhuweisky.cnblogs.com/archive/2006/03/17/351925.html前面的两篇文章我们已经介绍了Tcp连接池和Tcp连接池管理器,并且引入了ITcpPool接口,这个接口可以将单个连接池和一组连接池统一起来,使它们有相同的外部使用方式。现在我们需要考虑的问题是,当消息分派器分派一个接收到的请求时,如果这个请求需要被FS上的某个功能插件处理,那么消息分派器是如何将这个消息分派到对应的FS上去的?
回顾介绍
消息分派器时画出的各消息组件联系图,我们非常自然的想到,创建一个消息处理器,这个消息处理器将请求消息通过Tcp连接池转发给对应FS处理。这样的一个消息处理器称为“基于Tcp连接池的消息处理器”,它在消息组件联系图中的位置如下:
当有一个请求被分派到基于连接池的消息处理器时,它就从Tcp连接池中Rent一个NetworkStream,然后发送请求,并将接收到的回复返回给消息分派器。基于连接池的消息处理器仍然实现了IDataDealer接口,其借助ITcpPool组件来实现功能。下面给出简单伪码,因为整个实现比较复杂(错误处理、异常处理、ReRent机制等),代码比较多,所以就不列出来了,大家只要了解了主要的思想就行了,而这个思想是比较简单的。
public NetMessage DealRequestMessage(NetMessage reqMsg)
{
/*
1.Rent TcpStream
2.Send Request
3.Recieve Response
4.Return Response
*/
}
最后提一句,我们在上图的AS和FS中都看到了网络组件,如果AS也采用Tcp,那么这两个组件是相同的,也就是说Tcp组件可以很方便的复用。
在FS中,Tcp网络组件和功能插件之间是通过虚线连接起来的,也就是说网络组件并不会直接与功能插件交互,它们之间仍然存在这一个纽带,这就是消息处理器工厂,那么用于管理功能插件的工厂,就叫做“功能插件处理器工厂FunAddinDealerFactory”,这将在下文中介绍。
感谢关注!