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写的服务器端,可以连接多个用户,并处理其请求
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 reactor,单线程的多路分离工作模式。客户端,只需要简单的信号发送即可,代码略,见谅
大多数应用都会使用ACE_Reactor::instance()提供的默认反应器实例。...ACE_Reactor* my_reactor = new ACE_Reactor(tp_reactor, 1);//1表示my_reactor销毁时也要删除tp_reactorACE_Reactor::instance(my_reacto
ace_reactor 王牌React堆服务器。
This is a source code to solve Perfectly stirred reactor
Growth_of_GaN_on_Thomas_Swan_Reactor
固定床反应器一维稳态拟均相模型的模拟计算
在PSCAD中建立的利用电抗器跌落的模型,可用于低压穿越过程的仿真
de4dot .NET Reactor v6.x Modded 反编译工具
.net reactor 6.3免费版
与模糊工具(Obfuscator)相比,.NET Reactor 可以完全阻止对 .NET 程序集(由 C#, VB.NET, Delphi.NET, J#, MSIL... 等语言编写)的反编译。通俗的讲,.NET Reactor 在破解者和您的 .NET 代码之间构建了强大的防...
业界领先的.NET源代码保护混淆器(原版需要注册) .NET Reactor通过各种方法防止反编译,这些方法将.NET程序集转换为现有工具无法反编译的进程(并且很可能阻止任何未来工具反编译)。目前最新版本。 2020.04.22
dotNET_Reactor5.0.0.0破解版,可以给代码加密、加壳。
netty 入门Reactor示例
1.1 安装使用说明 1 1.2 实例1客户服务器模型 10 1.3 日志和跟踪 12 1.4 Reactor原理 17 1.5 Cout 错误 20 1.6 Connect连接不上 ACE_TMAIN 20 1.7 Reactor client 21 1.8 Reactor Server 23
the design of a plug flow reactor
计算机类毕业设计、课程作业,系统源码!!! 计算机类毕业设计、课程作业,系统源码!!! 计算机类毕业设计、课程作业,系统源码!!!
NET+Reactor_1279带破解文件NET+Reactor_1279带破解文件NET+Reactor_1279带破解文件NET+Reactor_1279带破解文件
Eziriz .NET Reactor 5.9.2.0 现找到的最新可用版本!