ACE之Acceptor-Connector框架

部署运行你感兴趣的模型镜像

简介

Acceptor-Connector框架解除了“对端服务的连接和初始化”和“连接和初始化之后处理”的耦合

结构

ACE_Acceptor<SVC_HANDLER, PEER_ACCEPTOR>
ACE_Connector<SVC_HANDLER, PEER_CONNECTOR>
ACE_Connector_Base<SVC_HANDLER>
ACE_Svc_Handler<PEER_STREAM, SYNCH_TRAITS>
ACE_Service_Object
PEER_ACCEPTOR
PEER_CONNECTOR
ACE_Task<SYNCH_TRAITS>

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簇

ACE_Acceptor<SVC_HANDLER, PEER_ACCEPTOR>
# PEER_ACCEPTOR peer_acceptor_
#int make_svc_handler(SVC_HANDLER *&sh)
#int accept_svc_handler(SVC_HANDLER *svc_handler)
#int activate_svc_handler(SVC_HANDLER *svc_handler)
ACE_Strategy_Acceptor<SVC_HANDLER, PEER_ACCEPTOR>
# CREATION_STRATEGY *creation_strategy_
# ACCEPT_STRATEGY *accept_strategy_
# CONCURRENCY_STRATEGY *concurrency_strategy_
# SCHEDULING_STRATEGY *scheduling_strategy_
ACE_Oneshot_Acceptor<SVC_HANDLER, PEER_ACCEPTOR>
ACE_Service_Object
ACE_Creation_Strategy<SVC_HANDLER>
ACE_Accept_Strategy<SVC_HANDLER>
ACE_Concurrency_Strategy<SVC_HANDLER>
ACE_Scheduling_Strategy<SVC_HANDLER>

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_Creation_Strategy<SVC_HANDLER>
# ACE_Thread_Manager *thr_mgr_
# ACE_Reactor *reactor_
+int make_svc_handler(SVC_HANDLER *&sh)
ACE_Singleton_Strategy<SVC_HANDLER>
ACE_DLL_Strategy<SVC_HANDLER>

ACE_Singleton_Strategy:在open时就创建实例,make_svc_handler时直接返回实例
ACE_DLL_Strategy:通过动态库的工厂方法来创建

ACE_Accept_Strategy

处理接受连接

ACE_Accept_Strategy<SVC_HANDLER>
# ACE_PEER_ACCEPTOR peer_acceptor_
# ACE_Reactor *reactor_
# ACE_PEER_ACCEPTOR_ADDR peer_acceptor_addr_
+int accept_svc_handler(SVC_HANDLER *)
+open(ACE_PEER_ACCEPTOR_ADDR &localAddr, bool reuse_addr)
+ACE_HANDLE get_handle()
+ACE_PEER_ACCEPTOR& acceptor()

ACE_Concurrency_Strategy

激活SVC_HANDLER的处理

ACE_Concurrency_Strategy<SVC_HANDLER>
+int activate_svc_handler(SVC_HANDLER *svc_handler, void *arg = 0)
ACE_Reactive_Strategy<SVC_HANDLER>
ACE_Thread_Strategy<SVC_HANDLER>
ACE_Process_Strategy<SVC_HANDLER>

ACE_Reactive_Strategy:向指定的Reactor注册
ACE_Thread_Strategy:向全局单例Reactor注册后,调用activate启动线程池执行svc
ACE_Process_Strategy:启动进程在子进程中注册handler

ACE_Scheduling_Strategy

ACE_Scheduling_Strategy<SVC_HANDLER>
+int suspend(void)
+int resume(void)
ACE_Schedule_All_Reactive_Strategy<SVC_HANDLER>
ACE_Schedule_All_Threaded_Strategy<SVC_HANDLER>

Acceptor的open

其时序为

serverACE_AcceptorPEER_ACCEPTORReactoropenopenenableregister_handlerserverACE_AcceptorPEER_ACCEPTORReactor
  • 首先调用PEER_ACCEPTOR(ACE_Sock_Acceptor)的open方法创建socket,绑定地址,并且监听
  • 将套接字设置非阻塞
  • 将读事件注册到reactor中

Acceptor的handle_input

其时序为

ReactorACE_AcceptorSVC_HANDLERPEER_ACCEPTORhandle_inputmake_svc_handlercreateaccept_svc_handleracceptactivate_svc_handleropenReactorACE_AcceptorSVC_HANDLERPEER_ACCEPTOR

Connector簇

ACE_Connector<SVC_HANDLER, PEER_CONNECTOR>
#int make_svc_handler(SVC_HANDLER *&sh)
#int connect_svc_handler(SVC_HANDLER *&svc_handler,const typename PEER_CONNECTOR::PEER_ADDR &remote_addr,ACE_Time_Value *timeout,const typename PEER_CONNECTOR::PEER_ADDR &local_addr,int reuse_addr,int flags,int perms)
#int connect_svc_handler(SVC_HANDLER *&svc_handler,SVC_HANDLER *&sh_copy,const typename PEER_CONNECTOR::PEER_ADDR &remote_addr,ACE_Time_Value *timeout,const typename PEER_CONNECTOR::PEER_ADDR &local_addr,int reuse_addr,int flags,int perms)
#int activate_svc_handler(SVC_HANDLER *svc_handler)
ACE_Strategy_Connector<SVC_HANDLER, PEER_CONNECTOR>
- ACE_Creation_Strategy<SVC_HANDLER> *creation_strategy_
- ACE_Connect_Strategy<SVC_HANDLER, PEER_CONNECTOR> *connect_strategy_
- ACE_Concurrency_Strategy<SVC_HANDLER> *concurrency_strategy_
ACE_Connect_Strategy<SVC_HANDLER, ACE_PEER_CONNECTOR>
# ACE_PEER_CONNECTOR connector_
+int connect_svc_handler(SVC_HANDLER *&sh,const ACE_PEER_CONNECTOR_ADDR &remote_addr,ACE_Time_Value *timeout,const ACE_PEER_CONNECTOR_ADDR &local_addr,bool reuse_addr,int flags,int perms)
+int connect_svc_handler(SVC_HANDLER *&sh,SVC_HANDLER *&sh_copy,const ACE_PEER_CONNECTOR_ADDR &remote_addr,ACE_Time_Value *timeout,const ACE_PEER_CONNECTOR_ADDR &local_addr,bool reuse_addr,int flags,int perms)
ACE_Cached_Connect_Strategy<SVC_HANDLER, ACE_PEER_CONNECTOR_1, MUTEX>
ACE_Connection_Recycling_Strategy

连接时主要依赖三步

  • 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

其时序为

clientACE_ConnectorSVC_HANDLERPEER_CONNECTORconnectmake_svc_handlercreateconnect_svc_handlerconnectactivate_svc_handleropenclientACE_ConnectorSVC_HANDLERPEER_CONNECTOR

您可能感兴趣的与本文相关的镜像

ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kgduu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值