|
楼主 |
发表于 2008-1-7 21:01:53
|
显示全部楼层
您的疑惑要回答到实质上,我想比较困难.我的想法仅当抛砖引玉吧
ACE_SOCK_Acceptor和ACE_SOCK_Connector都是作为"工厂类",它的设计的核心
功能是要create 什么东东,这里主要是date mode的Stream,无论它在作为主动端
的Connector 还是作为被动端的Acceptor.
因此,不让ACE_SOCK_Connector从ACE_SOCK派生,是很好理解的,使它们的关系从
强耦合继承关系改为弱耦合的依赖关系,感觉要好得多.Connector也没有复用
ACE_SOCK的任何方法,也没有必要从ACE_SOCK派生.
需要说的是,ACE_SOCK_Acceptor为什么要从ACE_SOCK派生呢?
从socket API来看,服务端要侦听连接,建立的过程是
创建socket (socket())-->绑定端口(bind())-->侦听(listen())
最后到响应客户端请求时 (accept())时,创建新的socket.
因此,ACE_SOCK_Acceptor需要有"自己的socket",于是,需要从
ACE_SOCK派生作为封装.
这一点,从ACE源代码中也有说明
/**
* @class ACE_SOCK_Acceptor
*
* @brief Defines a factory that creates new <ACE_Stream>s passively.
*
* The ACE_SOCK_Acceptor has its own "passive-mode" socket.
* This serves as a factory to create so-called "data-mode"
* sockets, which are what the ACE_SOCK_Stream encapsulates.
* Therefore, by inheriting from ACE_SOCK, ACE_SOCK_Acceptor
* gets its very own socket.
*/ |
|