说明:
摘录自《Pattern Languages of Program Design 3》中的”Acceptor-Connector pattern”部分。
目的:
在服务初始化后,从执行的任务中分离出任务初始化,Connecter模式负责主动服务初始化。
硬编码:
1.常见的错误陷阱
Gateway(client)可以硬编码成主动初始化服务连接。此外,Gateway的主动连接代码可以在传统的网络编程接口(套接字)中实现。在这种情况下,Gateway可以调用socket和connect主动初始化数据模式连接套接字。一旦确立连接,相关的服务处理程序对象被初始化,Gateway就可以给它提供的各种类型的服务发送数据。
2.缺点
(1)可拓展性和重用性受限制:硬编码的方法将服务初始化和服务行为紧密地联系在了一起,使得重用已有的服务或通过加入新的路由服务和增强已有服务来扩展Gateway变得相当困难。
(2)缺乏可升级性:如果存在大量Peer(Server),Gateway的同步连接确立策略就不能充分利用网络和Peer终端系统固有的并行性。
(3)网络编程接口易出错:硬编码方法的紧密结合很容易意外误用这些接口和I/O处理,这种方式到运行期才能进行检查。
解决方案:
Connector模式在服务初始化后,从执行的通信服务中单独分离出主动初始化角色。这些模式解除了使用面向连接的传输协议的下列影响:
(1)需要避免给每个新服务重新编写初始化代码。
(2)需要使用灵活的并发执行通信策略。
(3)需要使连接确立软件可跨平台移植。
(4)需要主动确立与大量Peer(Server)之间的高效连接。
结构和参与者:
(1)Reactor:对Connector模式而言,Reactor处理完成异步初始化的连接。Reactor允许多个ServiceHandler的连接 在单控制线程内配置的Connector异步初始化和完成。
(2)Service_Handler:该类给服务定义类属接口。Service_Handler包含一个封装有I/O描述符的通信端点。I/O描述符由Connector初始化,随后被Service_Handler用来 与和它连接的Connector通过open钩子激活Service_Handler。一旦Service_Handler初始化完成,通常它就不再和初始化器交互。
(3)Connector:该类连接并激活Service_Handler。Connector的Connect方法实现主动初始化Service_Handler策略,初始化完成时&#x