ACE Reactor 框架实现了Reactor模式,允许事件驱动的应用对源自许多不同事件源的事件做出反映,比如IO句柄,定时器,以及信号,应用重新定义框架所定义的挂钩方法。框架随机对其进行分派来处理事件,Reactor负责:(1)检查多路分离器来自各种事件源的、不同类型的连接和数据事件,(2)将这些事件分派给应用所定义的处理器,由它进行处理。
反应式服务器响应来自一个或多个事件源的时间,在理想情况下,对时间的响应会足够快,以使所有请求看起来像是被同时处理的,尽管事件处理通常是由单个线程处理的。同步事件多路分离器位于各个反应式服务器的心脏处。这种机制检测源自许多事件源的事件并对其作出响应,从而同步地使事件作为服务器正常执行路径的一部分提供给服务器。
select()函数是最为常见的同步事件多路分离器。这个系统函数在同一组IO句柄上等待指定的事件发生,当一个或者是多个IO句柄开始活动时,或是在指定的时间过去后,select函数就会返回。
ACE_Select_Reactor是ACE_Reactor接口的一种实现,它使用select同步时间多路分离器函数来检测IO和定时器事件,除了支持ACE_Reactor接口的所有特性外,ACE_Select_Reactor类还提供了以下能力:
1、它支持重入的反应器调用,应用可以从正在由统一反应器分派的事件处理器中调用handle_event方法;
2、它可以被配置为同步化的或异步化的,在线程安全性和降低开销之间进行折中;
3、它在再次调用select函数之前,分派其句柄集中的所有活动句柄,从而保证了公正性。
#include "ace/streams.h"
#include "ace/Reactor.h"
#include "ace/Select_Reactor.h"
#include "ace/Thread_Manager.h"
#include <string>
#include "Reactor_Logging_Server_T.h"
#include "Logging_Acceptor_Ex.h"
typedef Reactor_Logging_Server<Logging_Acceptor_Ex>
Server_Logging_Daemon;
static ACE_THR_FUNC_RETURN event_loop (void *arg)
{
ACE_Reactor *reactor = static_cast<ACE_Reactor *> (arg);
reactor->owner (ACE_OS::thr_self ());
reactor->run_reactor_event_loop ();
return 0;
}
static ACE_THR_FUNC_RETURN controller (void *arg)
{
for (;;)
{
std::string user_input;
std::getline (cin, user_input, '\n');
if (user_input == "quit")
{
break;
}
}
return 0;
}
int main(int argc,char **argv)
{
ACE_Select_Reactor select_reactor;
ACE_Reactor reactor (&select_reactor);
Server_Logging_Daemon *server;
// Ignore argv[0]...
--argc; ++argv;
ACE_NEW_RETURN (server,
Server_Logging_Daemon (argc, argv, &reactor),
1);
ACE_Thread_Manager::instance ()->spawn (event_loop, &reactor);
ACE_Thread_Manager::instance ()->spawn (controller, &reactor);
return ACE_Thread_Manager::instance ()->wait ();
}
在上面的代码中,在51行,由ACE_Thread_Manager单体派生一个线程,并让其运行event_loop()函数,在52行,由ACE_Thread_Manager单体派生一个线程,让其运行controller()函数。
在从main函数返回之前,等待其他两个线程推出,ACE_Thread_Manager:wait()还会收取两个线程的退出状态,以免内存泄漏。
分享到:
相关推荐
ACE Reactor是ACE库中的核心组件之一,它是事件驱动设计模式的一种实现,用于处理并发事件。在这个“ACE_Reactor.rar”压缩包中,包含的可能是关于如何使用ACE Reactor来构建服务器端程序的相关资料。 首先,我们来...
2. `ACE_Reactor`:管理事件,如I/O完成、定时器触发等,采用非阻塞I/O模型。 3. `ACE_Svc_Handler`:处理具体的业务逻辑,继承自`ACE_Event_Handler`,实现读写回调函数。 4. `ACE_Thread_Manager`:用于管理线程,...
在ACE_Client_1中,可能会使用到ACE_Wait_for_Single_Ready或者ACE_Select_Reactor等组件,来等待数据的到来并进行相应的处理。这种编程模型对于构建高性能、高并发的客户端应用尤其关键。 此外,ACE提供了线程管理...
- **reactor(ACE_Reactor*)**: 设置与此事件处理器关联的`ACE_Reactor`实例。 - **reactor()**: 获取当前关联的`ACE_Reactor`实例。 ##### 3. 事件掩码 - **READ_MASK**: 表示读就绪事件。 - **WRITE_MASK**: ...
标题中的"ace_send.rar_ACE_pop"提示我们讨论的主题与ACE库有关,特别是关于发送(send)和弹出(pop)信息的实现。ACE库,全称Adaptive Communication Environment,是一个跨平台的C++框架,主要用于分布式系统和...
例如,ACE_Select_Reactor 和 ACE_WFMO_Reactor 是 ACE_Reactor 的两个具体实现。它们都实现了 Reactor_Impl 接口,并定义了其具体实现。在 ACE 框架中,还有其他类型的 Reactor,例如 ACE_Dev_Poll_Reactor 和 ACE_...
标题中的"ACE.zip_ACE_ACE p_ACE source code"表明这是一个包含ACE库源代码的压缩文件。"ACE p"可能是指"ACE Proactor",它是ACE库的一部分,提供了异步事件处理的能力。"ACE source code"则直接指明了压缩包内的...
再者,ACE库提供了强大的I/O复用机制,如ACE_Select_Reactor和ACE.epoll_Reactor,它们分别对应于select和epoll系统调用,能够在Linux上实现高效的大规模并发连接处理。ACE_TSS(Thread Specific Storage)类允许...
A continuous stirred tank reactor (CSTR) for an exothermic reaction A → B. The component and energy balance of the dynamic model are derived by assuming constant liquid volume. The equations are ...
`ACE_Select_Reactor`、`ACE_Poll_Reactor`和`ACE_Epoll_Reactor`是相应的实现。 5. **时间同步与定时器**:ACE提供了`ACE_Time_Value`类来处理时间值,并且通过`ACE_Timer_Queue`和`ACE_Timer_Wheel`实现定时器,...
1. **跨平台性**:ACE支持多种操作系统,如Windows、Linux、Unix、VxWorks等,确保代码可以在不同的操作系统上运行。 2. **网络编程**:ACE提供了丰富的网络编程接口,如TCP/UDP套接字、多路复用I/O(如select、...
3. **ACE_Select_Reactor** 和 **ACE_Proactor**:这两种是ACE提供的不同类型的Reactor实现。ACE_Select_Reactor基于select()系统调用,适合小型应用。ACE_Proactor则采用异步I/O模型,适用于大型并发系统。 4. **...
3. **I/O复用**:ACE的Reactor模式实现了异步I/O,支持select、poll、epoll等不同操作系统的I/O复用机制。 4. **TCP/UDP套接字**:提供了一组封装了底层网络协议的类,简化了网络通信代码的编写。 5. **命名服务**...
例如,`ACE_Thread`模块提供了线程管理和同步原语,`ACE_Reactor`负责事件驱动的程序设计,而`ACE_SOCK`则涉及套接字编程。 2. **TAO**:The Adaptive Communication Framework(TAO)是基于CORBA(Common Object ...
1. **初始化ACE_WSOCK32.lib和ACE.dll**: 在Windows环境下,ACE服务器和客户端需要链接这些库,以支持网络I/O操作。 2. **定义服务端口和协议**: ACE支持多种网络协议,包括TCP/IP。在TCP服务器中,需要指定监听的...
1. **初始化ACE库**:在程序开始时,需要调用`ACE_OS::init()`函数初始化ACE环境。 2. **创建Acceptor**:使用`ACE_Acceptor`或`ACE_Reactor`的派生类来监听指定端口上的连接请求。这通常涉及到创建一个`ACE_SOCK_...
在接下来的部分,我们将详细介绍ACE的核心功能之一——Reactor模型。 #### 3. ACE Reactor框架 ##### 3.1 Reactor(反应器)框架 Reactor模式是一种常见的事件驱动设计模式,它将事件处理与事件接收解耦,使得系统...
- 注意不要运行`create_ace_build.pl`工具(该工具在“克隆源码树”部分中提到)。`configure`脚本会自动创建所有需要的文件和链接。通过执行以下命令来为你的平台配置ACE: ```shell ../configure [options] ``...
1. Reactor模式:这是ACE的核心,用于处理I/O事件,实现事件多路复用。Reactor可以监听多个描述符,当有事件发生时,它会调用相应的处理函数。 2. Proactor模式:与Reactor类似,但更适用于异步I/O操作,如Windows下...
4. **I/O复用**:ACE_Reactor模式是ACE的核心,它支持多路复用I/O(如select、poll、epoll),实现异步事件处理。 5. **并发和同步**:ACE_Guard、ACE_Read_Guard和ACE_Write_Guard用于互斥访问,ACE_Synch_Round_...