简介
Acceptor-Connector框架解除了“对端服务的连接和初始化”和“连接和初始化之后处理”的耦合
结构
ACE_Acceptor:被动连接方,其close方法将handler从reactor中删除,同时其acceptor关闭
ACE_Connector :主动连接方,其close方法主要是处理非阻塞连接的handler
ACE_Svc_Handler:被动连接方和主动连接方的处理器,其close方法默认认为是动态分配的,会调用delete this
ACE_Connector也继承ACE_Service_Object,主要是因为在非阻塞连接时,会向ACE_Connector所在的Reactor中注册CONNECT_MASK的事件处理器ACE_NonBlocking_Connect_Handler同时会添加到定时器队列中。另外其继承ACE_Connector_Base,也是主要处理非阻塞情况

Acceptor簇
make_svc_handler :创建SVC_HANDLER,对应ACE_Creation_Strategy
accept_svc_handler :接收客户端连接,设置SVC_HANDLER的peer_stream,对应ACE_Accept_Strategy
activate_svc_handler:将SVC_HANDLER 注册到reactor中, 对应ACE_Concurrency_Strategy
ACE_Oneshot_Accepter:不负责创建和接收策略,由调用方调用接受,同步选项支持超时和Reactor模式
ACE_Creation_Strategy
主要是创建SVC_HANDLER,即SVC_HANDLER的初始化处理
ACE_Singleton_Strategy:在open时就创建实例,make_svc_handler时直接返回实例
ACE_DLL_Strategy:通过动态库的工厂方法来创建
ACE_Accept_Strategy
处理接受连接
ACE_Concurrency_Strategy
激活SVC_HANDLER的处理
ACE_Reactive_Strategy:向指定的Reactor注册
ACE_Thread_Strategy:向全局单例Reactor注册后,调用activate启动线程池执行svc
ACE_Process_Strategy:启动进程在子进程中注册handler
ACE_Scheduling_Strategy
Acceptor的open
其时序为
- 首先调用PEER_ACCEPTOR(ACE_Sock_Acceptor)的open方法创建socket,绑定地址,并且监听
- 将套接字设置非阻塞
- 将读事件注册到reactor中
Acceptor的handle_input
其时序为
Connector簇
连接时主要依赖三步
- make_svc_handler
- connect_svc_handler
- activate_svc_handler
在基于策略的ACE_Strategy_Connector中,三步的对应策略关系为 - make_svc_handler : ACE_Creation_Strategy
- connect_svc_handler :ACE_Connect_Strategy
- activate_svc_handler :ACE_Concurrency_Strategy
Connector的connect
其时序为