peakzhang 发表于 2008-1-7 21:01:43

关于类结构的一点疑问

VOL 1中对c socket api函数做了归类(3类):
1.connector 2.acceptor 3.数据操作类(stream)
但ACE的类结构如下:
1.ACE_SOCK_Connector
2.ACE_IPC_SAP<----ACE_SOCK<----ACE_SOCK_Acceptor
3.ACE_IPC_SAP<----ACE_SOCK<----ACE_SOCK_IO<----ACE_SOCK_Stream
为何ACE_SOCK_Connector不从ACE_SOCK派生?不知道为何这样设计?
另外:看一下vol 1第3章的安排
3.2 ACE_Addr和ACE_INET_Addr
3.3 ACE_IPC_SAP
3.4 ACE_SOCK
3.5 ACE_SOCK_Connector
3.6 ACE_SOCK_IO和ACE_SOCK_Stream
3.7 ACE_SOCK_Acceptor
有点不太合理,为何把ACE_SOCK_connector放在ACE_SOCK后面讲?并不是ACE_SOCK的子类,就是个工厂嘛,该和acceptor一起讲。
[此贴

peakzhang 发表于 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.
*/

peakzhang 发表于 2008-1-7 21:02:00

感觉connector和acceptor的区别在于,acceptor要创建多个peer socket,再用这些peer socket创建sock_stream
页: [1]
查看完整版本: 关于类结构的一点疑问