天天看点

ACE 的ACE_Acceptor类

       最近在看一个腾讯开源的框架, c++ 的, 网上的资料少之又少,开源word写的那个,说实话按照word上都不如自行百度。折腾了两天才跑起来了。

   在看代码的过程中,对于 这个typedef ACE_Acceptor<ISGWIntf, ACE_SOCK_ACCEPTOR> ISGW_ACCEPTOR 可以说是ACE的一个很重要的类。是Acceptor参与者的实现体。

     Acceptor参与者位于网络连接的服务端,它有两个主要的功能,一是接收客户端的连接,不同的网络类型,其连接方式也不一样;二是创建服务处理器,具体的服务处理器完全由应用程序来决定。为了解决上述两个功能中的两个变体——连接方式和服务处理器,ACE_Acceptor类使用了两个模板参数,如图5-2所示。第一个参数用于定义应用程序的服务处理器类型,这样一旦有连接请求,就可以使用工厂方法创建服务处理器对象;第二个参数用于网络连接类型,在本书的分析中,它是ACE_SOCK_Acceptor,是Socket编程中accept函数的封装器。解决了上述两个变体后,还有一个问题需要解决,Acceptor参与者必须能够处理网络的连接事件。因此ACE将ACE_Acceptor类设计为ACE_Service_Object的子类,实际上它是ACE_Event_Handler的子类,这样它就可以被Reactor框架调度,用来处理网络连接事件了。

这里面用到了设计模式,

降低了服务和连接建立方法之间的耦合,非常容易改动其中一个,而不影响另外一个,从而也就可以复用以前编写的连接建立机制和服务例程的代码。在同样的例子中,使用这些模式的浏览器程序员一开始可以构造他的系统、使用特定的连接建立机制来运行它和测试它;然后,如果先前的连接机制被证明不适合他所构造的系统,他可以决定说他希望将底层连接机制改变为多线程的(或许使用线程池策略)。因为此模式提供了严格的去耦合,只需要极少的努力就可以实现这样的变动。

ACE_Acceptor 工厂允许应用开发者改变“助手”对象,以用于:被动连接建立 连接建立后的处理