- 浏览: 2030959 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (651)
- ACE (35)
- BAT (9)
- C/C++ (116)
- fast-cgi (14)
- COM (27)
- python (59)
- CGI (4)
- C# (2)
- VC (84)
- DataBase (29)
- Linux (96)
- P2P (6)
- PHP (15)
- Web (6)
- Memcached (7)
- IME输入法 (11)
- 设计模式 (2)
- 搜索引擎 (1)
- 个人情感 (4)
- 笔试/面试 (3)
- 一亩三分地 (33)
- 历史 (2)
- 地理 (1)
- 人物 (3)
- 经济 (0)
- 不仅仅是笑哦 (43)
- 小故事大道理 (2)
- http://www.bjdsmyysjk120.com/ (0)
- http://www.bjdsmyy120.com/ (0)
- 它山之石可以攻玉 (15)
- 大学生你关注些什么 (28)
- 数据恢复 (1)
最新评论
-
luokaichuang:
这个规范里还是没有让我明白当浏览器上传文件时,STDIN的消息 ...
FastCGI规范 -
effort_fan:
好文章!学习了,谢谢分享!
com技术简介 -
vcell:
有错误os.walk(strPath)返回的已经是全部的文件和 ...
通过python获取目录的大小 -
feifeigd:
feifeigd 写道注意:文章中的CPP示例第二行 #inc ...
ATL入门:利用ATL编写简单的COM组件 -
feifeigd:
注意:文章中的CPP示例第二行 #include " ...
ATL入门:利用ATL编写简单的COM组件
在服务器端使用Reactor框架 使用Reactor框架的服务器端结构如下: 服务器端注册两种事件处理器,ClientAcceptor和ClientService ,ClientService类负责和客户端的通信,每一个ClientService对象对应一个客户端的Socket连接。 ClientAcceptor专门负责被动接受客户端的连接,并创建ClientService对象。这样,在一个N个Socket连接的服务器程序中,将存在1个ClientAcceptor对象和N个ClientService对象。 整个服务器端流程如下: 代码如下:
代码功能比较简单,需要注意以下几点:
#include <ace/OS.h>
#include <ace/Reactor.h>
#include <ace/SOCK_Connector.h>
#include <ace/SOCK_Acceptor.h>
#include <ace/Auto_Ptr.h>
class ClientService : public ACE_Event_Handler
{
public:
ACE_SOCK_Stream &peer (void) { return this->sock_; }
int open (void)
{
//注册读就绪回调函数
return this->reactor ()->register_handler(this, ACE_Event_Handler::READ_MASK);
}
virtual ACE_HANDLE get_handle (void) const { return this->sock_.get_handle (); }
virtual int handle_input (ACE_HANDLE fd )
{
//一个简单的EchoServer,将客户端的信息返回
int rev = peer().recv(buf,100);
if(rev<=0)
return -1;
peer().send(buf,rev);
return 0;
}
// 释放相应资源
virtual int handle_close (ACE_HANDLE, ACE_Reactor_Mask mask)
{
if (mask == ACE_Event_Handler::WRITE_MASK)
return 0;
mask = ACE_Event_Handler::ALL_EVENTS_MASK |
ACE_Event_Handler::DONT_CALL;
this->reactor ()->remove_handler (this, mask);
this->sock_.close ();
delete this; //socket出错时,将自动删除该客户端,释放相应资源
return 0;
}
protected:
char buf[100];
ACE_SOCK_Stream sock_;
};
class ClientAcceptor : public ACE_Event_Handler
{
public:
virtual ~ClientAcceptor (){this->handle_close (ACE_INVALID_HANDLE, 0);}
int open (const ACE_INET_Addr &listen_addr)
{
if (this->acceptor_.open (listen_addr, 1) == -1)
{
ACE_OS::printf("open port fail");
return -1;
}
//注册接受连接回调事件
return this->reactor ()->register_handler(this, ACE_Event_Handler::ACCEPT_MASK);
}
virtual ACE_HANDLE get_handle (void) const
{ return this->acceptor_.get_handle (); }
virtual int handle_input (ACE_HANDLE fd )
{
ClientService *client = new ClientService();
auto_ptr<ClientService> p (client);
if (this->acceptor_.accept (client->peer ()) == -1)
{
ACE_OS::printf("accept client fail");
return -1;
}
p.release ();
client->reactor (this->reactor ());
if (client->open () == -1)
client->handle_close (ACE_INVALID_HANDLE, 0);
return 0;
}
virtual int handle_close (ACE_HANDLE handle,
ACE_Reactor_Mask close_mask)
{
if (this->acceptor_.get_handle () != ACE_INVALID_HANDLE)
{
ACE_Reactor_Mask m = ACE_Event_Handler::ACCEPT_MASK |
ACE_Event_Handler::DONT_CALL;
this->reactor ()->remove_handler (this, m);
this->acceptor_.close ();
}
return 0;
}
protected:
ACE_SOCK_Acceptor acceptor_;
};
int main(int argc, char *argv[])
{
ACE_INET_Addr addr(3000,"192.168.1.142");
ClientAcceptor server;
server.reactor(ACE_Reactor::instance());
server.open(addr);
while(true)
{
ACE_Reactor::instance()->handle_events();
}
return 0;
}
发表评论
-
u盘乱码恢复方法
2015-05-20 15:29 1749u盘乱码恢复方法,在使用u盘、SD卡、tf卡等移动储 ... -
使用 ACE 库框架在 UNIX 中开发高性能并发应用
2009-11-19 14:36 3154使用 ACE 库框架在 UNIX ... -
ACE中TCP通信
2009-09-17 11:10 2255概述: 传输控制协议TCP(Transmission C ... -
ACE的TSS bug
2009-08-26 13:55 1601ACE的TSS bug Bugzilla Bug ... -
ACE读取ini格式的配置文档
2009-08-12 15:16 2130ACE读取ini格式的配置文档 不多说了,功能很清 ... -
reactor_logging_server会出现运行 error LNK2019
2009-08-06 17:06 2568reactor_logging_server会出 ... -
ACE前摄器Proactor模式
2009-08-05 11:36 4493ACE前摄器Proactor模式 ... -
ACE_Message_Block功能简介
2009-08-05 11:35 3059ACE_Message_Block功能简介 ACE_Me ... -
ACE接受器-连接器模式
2009-08-05 11:34 4030ACE接受器-连接器模 ... -
ACE反应器(Reactor)模式(4)
2009-08-05 11:31 5213ACE反应器(Reactor)模式(4) 定时器的实现 ... -
ACE反应器(Reactor)模式(2)
2009-08-05 11:30 3504ACE反应器(Reactor)模式(2) 在Socket ... -
ACE反应器(Reactor)模式(1)
2009-08-05 11:29 3359ACE反应器(Reactor)模式(1 ... -
ACE主动对象模式(2)
2009-08-05 11:28 2145ACE主动对象模式(2) 在上篇文章里,我们简单的介绍了 ... -
ACE主动对象模式(1)
2009-08-05 11:27 2233ACE主动对象模式(1) 主动对象模式用于降低方法执行和 ... -
ACE中UDP通信
2009-08-05 11:26 2932ACE中UDP通信 udp是一种无连接的协议,提供无连接 ... -
ACE中TCP通信
2009-08-05 11:25 3195ACE中TCP通信 概述: 传输控制协议TCP(Tra ... -
ACE线程管理机制-面向对象的线程类ACE_Task
2009-08-05 11:24 2726ACE线程管理机制-面向 ... -
ACE线程管理机制-线程的创建与管理
2009-08-05 11:23 2479ACE线程管理机制-线程的创建与管理 有过在不同的操作系 ... -
ACE自适配通信环境简介
2009-08-05 11:21 1913ACE自适配通信环境简 ... -
获取主机信息(C++和C#版)
2009-08-05 11:15 2202获取主机信息(C++和C#版) 在C语言中,主机信息是存 ...
相关推荐
ACE反应器(Reactor)模式是一种用于处理并发事件的架构设计模式,主要应用于网络服务器的开发,特别是处理大量并发连接的场景。它有效地解决了在单线程或多线程环境中,如何高效地处理多个I/O事件的问题。Reactor模式...
创建自定义反应器实例后,可以使用`ACE_Reactor::instance()`方法替换默认的反应器实例,并指定是否在程序结束时删除这个实例。 3. **具体的Reactor实现** - **ACE_Select_Reactor**:这是在除Windows外的大多数...
- 第3章深入讲解了ACE反应器框架的原理和组成部分,包括ACE_Time_Value类、ACE_Event_Handler类、ACE_Timer_Queue类和ACE_Reactor类。这些类是实现事件驱动模型的基础,对提高应用性能起到了关键作用。 4. ACE反应...
Ace Reactor提供了多种反应器实现,包括基于select、poll、epoll等不同操作系统原生API的版本,以适应不同的性能和规模需求。例如,Linux系统的epoll机制在高并发下表现出色,因为它支持水平触发和边缘触发两种模式...
ACE的核心特性包括反应器(Reactor)和预行动器(Proactor)模式,它们是事件驱动设计的关键部分。 2.2 **环境搭建** 在开始开发前,需要安装ACE库,并配置开发环境。这通常包括下载源码,编译安装,然后在项目中链接...
5. **ACE反应器(Reactor)模式**: Reactor模式是ACE的核心,它负责监听和分发网络事件。开发者需要理解Reactor的事件处理机制,如事件注册、调度策略、回调函数等。同时,Reactor的异步I/O模型也是学习的重点,它...
反应器操作 - **close()**: 关闭并释放由`ACE_Reactor`使用的资源。 - **register_handler(ACE_Event_Handler*, ACE_Reactor_Mask)**: 注册事件处理器到`ACE_Reactor`,并指定感兴趣的事件类型。 - **remove_...
7. **分布式系统设计**:ACE_TSS(Thread Specific Storage)用于线程局部存储,ACE_Logger提供日志记录,ACE_WFMO_Reactor实现了Windows下的基于WaitFOrMultipleObjects的反应器。 8. **性能优化**:ACE_Dynamic_...
3. **ACE组件**:包括ACE_TSS(线程特定存储)、ACE_Reactor(事件反应器)、ACE_Scheduler(调度器)、ACE_Proactor(异步操作处理器)等。每个组件都有其特定的功能,如Reactor用于事件驱动编程,Proactor则适用于...
- **反应器模型**:ACE的反应器(`ACE::Reactor`)是处理I/O事件的核心组件。 - **设计模式的应用**:ACE广泛采用了设计模式,如单例模式、适配器模式、迭代器模式等。 ##### 2. 内存管理 - **缓存内存分配类ACE_...
1. **ACE框架结构**:ACE主要由几个核心组件构成,如Reactor(事件反应器)、Thread Manager(线程管理器)、Tokenizer(分词器)等,它们共同构成了一个强大的网络通信框架。 2. **Reactor模式**:这是ACE的核心...
调用方可以将自己关心的事件及其处理函数在反应器中注册,当特定的事件发生时,由反应器在其线程环境中调用预先指定的函数。 ACE_Acceptor/Connector 封装客户端和服务器的连接过程,并使用了类厂模式,在连接建立...
##### 3.1 Reactor(反应器)框架 Reactor模式是一种常见的事件驱动设计模式,它将事件处理与事件接收解耦,使得系统更加灵活和可扩展。 ###### 3.1.1 ACE_Event_Handler(事件处理器) 在ACE框架中,`ACE_Event_...
第 7 章 ACE 反应器(Reactor)的设计和使用:用于事件多路分离的面向对象框架 第 8 章 前摄器(Proactor):用于为异步事件多路分离和分派处理器的对象行为模式 第 9 章 接受器-连接器(Acceptor-Connector):...
2. `ACE_Reactor`: 反应器模式是ACE中的核心设计模式,用于处理并发事件。`ACE_Reactor`负责调度事件处理,当有新的连接或数据到达时,它会调用相应`ACE_Handler`的回调函数。 3. `ACE_Acceptor`: ACE提供`ACE_...
ACE是基于事件驱动和反应器模式的库,它提供了一系列接口和工具,用于简化网络编程、并发处理和系统资源管理。ACE支持多种操作系统,包括Windows、Linux、Unix等,确保代码的可移植性。 2. ACE核心概念: - 事件...
Process Communication,进程间通信)、I/O、Active Object(活动对象设计模式)、Reactor(反应器模式)、Proactor(前摄器模式)、Acceptor(接受器模式)以及众多操作系统平台,例如UNIX、Win32、Linux、Mac OS、...