`
acme_ltt
  • 浏览: 53725 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

ACE_Select_Reactor 1 ——入门

阅读更多

    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()还会收取两个线程的退出状态,以免内存泄漏。

0
0
分享到:
评论

相关推荐

    ACE_Reactor.rar_ACE reactor_ACE_React_ACE_Reactor_reactor

    ACE Reactor是ACE库中的核心组件之一,它是事件驱动设计模式的一种实现,用于处理并发事件。在这个“ACE_Reactor.rar”压缩包中,包含的可能是关于如何使用ACE Reactor来构建服务器端程序的相关资料。 首先,我们来...

    ACE_server.rar_ACE server_ACE tcp_ACE_SERVER_ACE框架_ace server cl

    2. `ACE_Reactor`:管理事件,如I/O完成、定时器触发等,采用非阻塞I/O模型。 3. `ACE_Svc_Handler`:处理具体的业务逻辑,继承自`ACE_Event_Handler`,实现读写回调函数。 4. `ACE_Thread_Manager`:用于管理线程,...

    ACE_Client_1.rar_ACE client

    在ACE_Client_1中,可能会使用到ACE_Wait_for_Single_Ready或者ACE_Select_Reactor等组件,来等待数据的到来并进行相应的处理。这种编程模型对于构建高性能、高并发的客户端应用尤其关键。 此外,ACE提供了线程管理...

    ACE框架知识

    - **reactor(ACE_Reactor*)**: 设置与此事件处理器关联的`ACE_Reactor`实例。 - **reactor()**: 获取当前关联的`ACE_Reactor`实例。 ##### 3. 事件掩码 - **READ_MASK**: 表示读就绪事件。 - **WRITE_MASK**: ...

    ace_send.rar_ACE_pop

    标题中的"ace_send.rar_ACE_pop"提示我们讨论的主题与ACE库有关,特别是关于发送(send)和弹出(pop)信息的实现。ACE库,全称Adaptive Communication Environment,是一个跨平台的C++框架,主要用于分布式系统和...

    ACE资料系列 - ACE中设计模式

    例如,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.zip_ACE_ACE p_ACE source code"表明这是一个包含ACE库源代码的压缩文件。"ACE p"可能是指"ACE Proactor",它是ACE库的一部分,提供了异步事件处理的能力。"ACE source code"则直接指明了压缩包内的...

    ACE库(linux)

    再者,ACE库提供了强大的I/O复用机制,如ACE_Select_Reactor和ACE.epoll_Reactor,它们分别对应于select和epoll系统调用,能够在Linux上实现高效的大规模并发连接处理。ACE_TSS(Thread Specific Storage)类允许...

    CSTR.zip_CSTR.m_cstr_cstr model_stirred reactor_tank reactor

    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库入门(中文)

    `ACE_Select_Reactor`、`ACE_Poll_Reactor`和`ACE_Epoll_Reactor`是相应的实现。 5. **时间同步与定时器**:ACE提供了`ACE_Time_Value`类来处理时间值,并且通过`ACE_Timer_Queue`和`ACE_Timer_Wheel`实现定时器,...

    ACE_wrappers22222222

    1. **跨平台性**:ACE支持多种操作系统,如Windows、Linux、Unix、VxWorks等,确保代码可以在不同的操作系统上运行。 2. **网络编程**:ACE提供了丰富的网络编程接口,如TCP/UDP套接字、多路复用I/O(如select、...

    ACE入门详细例子

    3. **ACE_Select_Reactor** 和 **ACE_Proactor**:这两种是ACE提供的不同类型的Reactor实现。ACE_Select_Reactor基于select()系统调用,适合小型应用。ACE_Proactor则采用异步I/O模型,适用于大型并发系统。 4. **...

    ACE_wrappers11111111

    3. **I/O复用**:ACE的Reactor模式实现了异步I/O,支持select、poll、epoll等不同操作系统的I/O复用机制。 4. **TCP/UDP套接字**:提供了一组封装了底层网络协议的类,简化了网络通信代码的编写。 5. **命名服务**...

    ACE_wrappers

    例如,`ACE_Thread`模块提供了线程管理和同步原语,`ACE_Reactor`负责事件驱动的程序设计,而`ACE_SOCK`则涉及套接字编程。 2. **TAO**:The Adaptive Communication Framework(TAO)是基于CORBA(Common Object ...

    ACE_server.rar_ACE server

    1. **初始化ACE_WSOCK32.lib和ACE.dll**: 在Windows环境下,ACE服务器和客户端需要链接这些库,以支持网络I/O操作。 2. **定义服务端口和协议**: ACE支持多种网络协议,包括TCP/IP。在TCP服务器中,需要指定监听的...

    ACE编写的简单网络服务器

    1. **初始化ACE库**:在程序开始时,需要调用`ACE_OS::init()`函数初始化ACE环境。 2. **创建Acceptor**:使用`ACE_Acceptor`或`ACE_Reactor`的派生类来监听指定端口上的连接请求。这通常涉及到创建一个`ACE_SOCK_...

    ACE开发指南(初级).

    在接下来的部分,我们将详细介绍ACE的核心功能之一——Reactor模型。 #### 3. ACE Reactor框架 ##### 3.1 Reactor(反应器)框架 Reactor模式是一种常见的事件驱动设计模式,它将事件处理与事件接收解耦,使得系统...

    ACE 使用EPOLL

    - 注意不要运行`create_ace_build.pl`工具(该工具在“克隆源码树”部分中提到)。`configure`脚本会自动创建所有需要的文件和链接。通过执行以下命令来为你的平台配置ACE: ```shell ../configure [options] ``...

    ACE.rar_ACE 网络 编程_visual c

    1. Reactor模式:这是ACE的核心,用于处理I/O事件,实现事件多路复用。Reactor可以监听多个描述符,当有事件发生时,它会调用相应的处理函数。 2. Proactor模式:与Reactor类似,但更适用于异步I/O操作,如Windows下...

    ACE 程序员指南 源代码

    4. **I/O复用**:ACE_Reactor模式是ACE的核心,它支持多路复用I/O(如select、poll、epoll),实现异步事件处理。 5. **并发和同步**:ACE_Guard、ACE_Read_Guard和ACE_Write_Guard用于互斥访问,ACE_Synch_Round_...

Global site tag (gtag.js) - Google Analytics