
ACE 通用适配器
akailee
牛B的人生不需要解释
展开
-
ACE编程
ACE历时20年,耗费数千万美金,在中间件领域享有盛誉。更可贵的是,ACE彻底的开源,且没有任何限制条件,完全是共产主义的精神,让人钦佩。ACE的Wrapper Facade模式解决了夸平台的c++编程问题。虽然我们现在有标准C++,但是目前的C++标准库对于多线程、网络通信、并发处理、进程管理以及小内存分配、共享内存、内存映射文件等诸多实际运用中的问题没有支持。相信随着时间的推移,C+原创 2009-04-18 12:25:00 · 1830 阅读 · 0 评论 -
ACE笔记(2) -用ACE_Reactor实现类似计时器的装置
用ACE_Reactor实现类似计时器的装置存在一个ACE_Reactor单体实例,其有schedule_timer方法,提供了4个参数schedule_timer (ACE_Event_Handler *event_handler, const void *arg, co转载 2009-04-18 11:58:00 · 515 阅读 · 0 评论 -
ACE笔记(1) -日志消息管理
ACE提供了非常灵活、方便的日志管理和消息输出功能,下面就一些简单和直接的功能做一个简单介绍ACE_DEBUG 常规的一些输出消息 ACE_ERROR 会提供程序出错的一些低级消息2个宏的用法上是一致的 ACE_DEBUG(错误级别,"格式串",变量1...变量N) 其中部分错误级别系统定义如下: LM_SHUTDOWN = 01,系统死机级别 LM_TRACE =转载 2009-04-18 11:58:00 · 405 阅读 · 0 评论 -
ACE中使用完成端口-Proactor框架
使用ACE中的Proactor的话,会要比我们使用我们直接写的要来得简单。在说Proactor之前我们需要了解Windows里的完成端口的工作原理。 完成端口是WinNT内核里的一个框架。我们可以为我们的一些异步的操作新建一个完成端口,然后这个完成端口会有几个工作线程来处理。我们可以将socket,或是一个文件读写,或是一个串口的收发数据的句柄,梆定到这个完成端口之上,当一个读或是写的转载 2009-04-18 11:55:00 · 1707 阅读 · 1 评论 -
ACE反应器(Reactor)模式(3)
在服务器端使用Reactor框架 使用Reactor框架的服务器端结构如下: 服务器端注册两种事件处理器,ClientAcceptor和ClientService ,ClientService类负责和客户端的通信,每一个ClientService对象对应一个客户端的Socket连接。 ClientAcceptor专门负责被动接受客户端的连接,并创建ClientService对象。这样转载 2009-04-18 11:46:00 · 386 阅读 · 0 评论 -
ACE主动对象模式(1)
主动对象模式用于降低方法执行和方法调用之间的耦合。该模式描述了另外一种更为透明的任务间通信方法。 传统上,所有的对象都是被动的代码段,对象中的代码是在对它发出方法调用的线程中执行的,当方法被调用时,调用线程将阻塞,直至调用结束。而主动对象却不一样。这些对象具有自己的命令执行线程,主动对象的方法将在自己的执行线程中执行,不会阻塞调用方法。 例如,设想对象"A"已在你的程序的main()转载 2009-04-18 11:42:00 · 335 阅读 · 0 评论 -
ACE中TCP通信
概述: 传输控制协议TCP(Transmission Control Protocol):TCP提供可靠的、面向连接的运输服务,用于高可靠性数据的传输。TCP协议的可靠性是指保证每个tcp报文能按照发送顺序到达客户端。 Tcp通信过程一般为如下步骤: 服务器绑定端口,等待客户端连接。 客户端通过服务器的ip和服务器绑定的端口连接服务器。 服务器和客转载 2009-04-18 11:40:00 · 437 阅读 · 0 评论 -
ACE线程管理机制-面向对象的线程类ACE_Task (推荐)
我们在前一章中使用ACE_Thread包装时,你一定已经注意到了一些不够"优雅"的地方。那一章中的大多数程序都被分解为函数、而不是对象。这是因为ACE_Thread包装需要一个全局函数名、或是静态方法作为参数。随后该函数(静态方法)就被用作所派生的线程的"启动点"。这自然就使得程序员要为每个线程写一个函数。如我们已经看到的,这可能会导致非面向对象的程序分解。 ACE_Task对常用线程处转载 2009-04-18 11:37:00 · 542 阅读 · 0 评论 -
ACE获取本机IP地址和主机名
获取本机IP地址(IP ):一个主机可以有多个IP,ACE::get_ip_interfaces可以得到IP数量和ACE_INET_Addr类型的指针数组,数组大小就是IP数目。 ACE_INET_Addr* addr_array; size_t count = 0; if (ACE::get_ip_interfaces(count, addr_array) != 0)转载 2009-04-18 12:30:00 · 1968 阅读 · 1 评论 -
ACE学习笔记--持续更新中
1.动态获得端口号: ACE_Asynch_Acceptor acceptor; ACE_INET_Addr addr= ACE_INET_Addr("HAStatus"); if (acceptor.open (addr, initial_read_size, 1) == -1) return转载 2009-04-18 12:25:00 · 717 阅读 · 0 评论 -
ACE笔记(10) -ACE文件操作
ACE里的文件操作与平常的Win32里面的文件操作有所不同,这是因为ACE是为网络开发而设计的,里面普遍都遵循了Client/Server模式,这样在操作文件时,ACE把文件看做是一个Socket服务器,而进行文件操作的类(ACE_FILE_IO)被看做是一个Socket Client。 有了上面的认识,使用ACE的文件操作就容易理解了: 调用ACE_FILE_I转载 2009-04-18 12:04:00 · 1465 阅读 · 0 评论 -
数据接收中粘包及半包的处理
在使用TCP协议的网络应用中,不可避免需要处理的一个问题就是半包和粘包的情况。 一种做法是在接收端设一个比较大的缓冲区,先将收到的数据包都放到缓冲区中,然后从该缓冲区中选取完整的数据包出来。该缓冲区的实现可以使用环形缓冲区进行优化,避免频繁的数据移动。使用该方法的一个描述见 http://www.vckbase.com/document/viewdoc/?id=1203 另外一种转载 2009-04-18 12:05:00 · 489 阅读 · 0 评论 -
ACE的构建(VC++6.0环境)
Windows下ACE的构建1. 将ACE-5.5.zip解压到所需的安装目录,此处以E:/为例,解压后形成ACE_wrappers文件夹,因此ACE将会存在于ACE_wrappers/ace目录中。ACE_ROOT=E:/ACE_wrappers。2. 在系统中新建ACE_ROOT环境变量,值设为 E:/ACE_wrappers。具体设置为:我的电脑->属性->高级->环境变量->新建3. 在转载 2009-04-18 12:23:00 · 439 阅读 · 0 评论 -
ACE开发游戏服务器笔记一
我的插件式游戏平台已经基本成型了,游戏的服务端使用的是ACE作为网络引擎,在开发中遇到了这样或那样的问题,现在有些空了,准备把它们整理一下写出来,希望对初学者们有些帮助。 今天讲讲怎么开始使用ACE吧。 从哪儿下载我就不说了,现在多得更米一样。 我的是5.3的版本,解开包后,你会发现有N多的文件和目录,其它先不管,我们先看ace这个目录,ACE的主要的文转载 2009-04-18 12:14:00 · 517 阅读 · 0 评论 -
ACE示例 - ACE Proactor
这个示例将用ACE Proactor来实现echo server代码量差不多只有完成端口的1/3ACE Reactor的实现http://www.cppblog.com/sandy/archive/2006/02/17/3308.html完成端口的实现http://www.cppblog.com/sandy/archive/2007/06/06/25670.html当然如果你理解了完成端口,转载 2009-04-18 12:05:00 · 608 阅读 · 0 评论 -
高性能I/O设计模式Reactor和Proactor
昨天购买了《程序员》杂志 2007.4期,第一时间去翻阅了一遍,其中有一篇《两种高性能I/O设计模式的比较》令人眼睛一亮,这是一篇译文,偶最近在一直想认真看看这方面的文章很久了。文章主要是讲到了系统I/O方式可分为阻塞,非阻塞同步和非阻塞异步三类,三种方式中,非阻塞异步模式的扩展性和性能最好。主要是讲了两种IO多路复用模式:Reactor和Proactor,并对它们进行了比较。文章还转载 2009-04-18 11:54:00 · 1547 阅读 · 0 评论 -
ACE接受器-连接器模式
接受器-连接器设计模式(Acceptor-Connector)使分布式系统中的连接建立及服务初始化与一旦服务初始化后所执行的处理去耦合。 这样的去耦合通过三种组件来完成:acceptor、connector 和 servicehandler(服务处理器)。 连接器主动地建立到远地接受器组件的连接,并初始化服务处理器来处理在连接上交换的数据。 接受器被动地等待来自远地连接器的连转载 2009-04-18 11:50:00 · 428 阅读 · 0 评论 -
ACE线程管理机制-并发控制(3)
ACE Condition类属 ACE Condition类属(条件变量)提供风格与互斥体、读者/作者锁和计数信号量不同的锁定机制。当持有锁的线程在临界区执行代码时,这三种机制让协作线程进行等待。相反,条件变量通常被一个线程用于使自己等待,直到一个涉及共享数据的条件表达式到达特定的状态。当另外的协作线程指示共享数据的状态已发生变化,调度器就唤醒一个在该条件变量上挂起的线程。于是新唤醒的线原创 2009-04-18 11:34:00 · 353 阅读 · 0 评论 -
ACE的安装
ACE的安装是一件比较麻烦的事情,这里简单的记录了我在VS2005下安装ACE的过程,希望能给大家一个参考。 安装环境: 操作系统:Windows XP 专业版 编译环境:VS2005中文版 ACE版本:ACE-5.5.1 安装过程: 下载安装包。 Ace的安装文件可以在http://download.dre.vanderbilt.转载 2009-04-18 11:28:00 · 262 阅读 · 0 评论 -
ACE日志系统(1)
介绍了ACE中日志系统(Logging Facility)的基本使用一、简介以前曾介绍过一个开源日志系统log4cplus,ACE也有自己的Logging Facility,与log4cplus相似,ACE日志系统也具有线程安全、灵活、分级显示等特点,可以面向程序调试、运行、测试、和维护等全生命周期,可以选择将信息输出到屏幕、文件、系统日志(如Windows下的Event log)、甚至是远转载 2009-04-18 12:08:00 · 798 阅读 · 0 评论 -
创建一个可正常结束的Proactor服务器
这是APG上关于Proactor使用的例子,去掉了trace信息,做了一点小修改:#include #include #include #define LISTEN_PORT 5222class HA_Proactive_Service : public ACE_Service_Handler{public: ~HA_Proactive_Service () {转载 2009-04-18 12:07:00 · 463 阅读 · 0 评论 -
ACE日志系统(2)
ACE可以将输出重新定向到stderr(缺省)、系统日志、输出流(Output Stream)、甚至是回调函数,在C/S结构中,ACE也可以实现客户端输出定向到服务器。本节将详细讨论这些内容。三 ACE的重新定向设置或改变ACE日志输出目标(logging sink)可以通过ACE_Log_Msg的方法open来完成,另外可通过set_flags和clr_flags来配合实现输出到多个目标。转载 2009-04-18 12:08:00 · 661 阅读 · 0 评论 -
ACE开发游戏服务器
在win32平台上最有效率的IO模型,莫过于完成端口了。优快云上到处都是关于完成端口的问题。在ACE中对win32平台的完成端口有着非常好的封装。ACE中前摄式框架的win32实现就是使用的完成端口。我们先来看看这个框架有哪些组成部分。ACE_Proactor 前摄器,真怪异的名字。叫异步事件分配者多好啊。ACE_Service_Handler 事件处理器。处理所有异步操作的结果。ACE原创 2009-04-18 12:06:00 · 699 阅读 · 0 评论 -
ACE笔记(9) -ACE日期时间类
ACE日期时间类比较少,常用就是下面2个类ACE_DateTimeACE_Time_ValueACE_DateTime用于获得和设置当前日期/时间,其没有提供运算操作,精确到毫秒ACE_Time_Value 主要用于时间统计,精确到微妙,提供了运算操作 要获得当前的时间,可调用 ACE_OS::gettimeofday() 其提供的msec,usec均表示当前变量中保存的时间的总和 如下:转载 2009-04-18 12:03:00 · 1014 阅读 · 0 评论 -
ACE笔记(6) -Proactor机制下的异步SOCKET开发
Proactor机制和reactor机制的不同 1、在reactor机制下,所有I/O请求是同步的,即接到信号请求后,立即执行信号处理, 执行完后才开始继续监听信号请求,其接收信号请求的机制是被动的 而在Proactor机制下,I/O请求是异步的,即接到信号请求后,不立即执行信号处理(而是在莫个时刻执行该处理), 然后再继续监听信号请求,其接收信号请求的机制是主动的 2、要想符合Proact转载 2009-04-18 12:01:00 · 820 阅读 · 0 评论 -
ACE笔记(4) -ACE_Reactor 机制下 的ACE异常处理
ACE_Manual_Event 类 唤醒所有正在等待的线程,并重新设置信号 常用构造: ACE_Manual_Event(1) 表当前对象已经准备就绪,一旦有线程处于等待状态,就将触发并重置事件异常处理的语法结构: ACE_SEH_TRY { //可能发生异常的代码 } ACE_SEH_EXCEPT转载 2009-04-18 12:00:00 · 858 阅读 · 0 评论 -
ACE的陷阱
坦白说,使用这个标题无非是希望能够吸引你的眼球,这篇文章的目的仅仅是为了揭示一些ACE缺陷的。文章适合的读者是对ACE(ADAPTIVE Communication Environment)有一定研究,或者正在使用ACE从事项目开发的人士参考。如果你对C++还是新手,甚至包括ACE知识初学者,(但你想飞的更高),建议你收藏这篇文档以后阅读。秉承陷阱系列文章的传统,我只是通过一些辩证的角度去看AC转载 2009-04-18 11:57:00 · 2210 阅读 · 1 评论 -
ACE前摄器Proactor模式 (完成端口封装,推荐)
当 OS 平台支持异步操作时,一种高效而方便的实现高性能 Web 服务器的方法是使用前摄式事件分派。使用前摄式事件分派模型设计的 Web 服务器通过一或多个线程控制来处理异步操作的完成。这样,通过集成完成事件多路分离(completion event demultiplexing)和事件处理器分派,前摄器模式简化了异步的 Web 服务器。 异步的 Web 服务器将这样来利用前摄器模式:首转载 2009-04-18 11:53:00 · 750 阅读 · 0 评论 -
ACE反应器(Reactor)模式(4)
定时器的实现 通过Reactor机制,还可以很容易的实现定时器的功能,使用方式如下。 编写一个事件反应器,重载handle_timeout()方法,该方法是定时器的触发时间到时,会自动触发该方法。 通过Reactor的schedule_timer()方法注册定时器。 启动reacotr的handle_events()事件分发循环。 当不想使转载 2009-04-18 11:49:00 · 417 阅读 · 0 评论 -
ACE反应器(Reactor)模式(2)
在Socket编程中,常见的事件就是"读就绪","写就绪",通过对这两个事件的捕获分发,可以实现Socket中的异步操作。 Socket编程中的事件处理器 在前面我们已经介绍过,在ACE反应器框架中,任何都必须派生自ACE_Event_Handler类,并通过重载其相应会调事件处理函数来实现相应的回调处理的。在Socket编程中,我们通常需要重载的函数有 handle_inp转载 2009-04-18 11:45:00 · 394 阅读 · 0 评论 -
ACE线程管理机制-线程的创建与管理 (基础的线程管理)
有过在不同的操作系统下用c++进行过多线程编程的朋友对那些线程处理的API可能深有体会,这些API提供了相同或是相似的功能,但是它们的API的差别却极为悬殊,十分令人头痛。 ACE_Thread提供了对不同OS的线程调用的简单包装,通过一个通用的接口进行处理线程创建、挂起、取消和删除等问题。 一. 线程入口函数 所有线程必须从一个指定的函数开始执行,该函数称为线程函数,它必须具有转载 2009-04-18 11:36:00 · 528 阅读 · 0 评论 -
ACE线程管理机制-并发控制(4)
ACE Synchronization类 这一类并发控制对象一般也叫做杂项并发类,这类对象一般用得不多,这里我只是对其作一些简单的介绍。 1.Atomic_Op类 ACE_Atomic_Op类用于将同步透明地参数化进基本的算术运算中。 ACE_Atomic_Op是一种模板类,锁定机制和需要参数化的类型被作为参数传入其中,重载所有算术操作符,并确保在操作前获取锁,在操作后释放它转载 2009-04-18 11:35:00 · 372 阅读 · 0 评论 -
ACE线程管理机制-并发控制(2)
ACE Guard类属 与C一级的互斥体API相比较,Mutex包装为同步多线程控制提供了一种优雅的接口。但是,Mutex潜在地容易出错,因为程序员有可能忘记调用release方法(当然,C级的互斥体API更容易出错)。这可能由于程序员的疏忽或是C++异常的发生而发生,然而,其导致及其严重的后果--死锁。 因此,为改善应用的健壮性,ACE同步机制有效地利用C++类构造器和析构器的语义转载 2009-04-18 11:32:00 · 334 阅读 · 0 评论 -
ACE中网络通讯编程基本架构
ACE_INET_Addr类,包装了网络地址 ACE_SOCK_Connector类,扮演主动连接角色,发起通讯连接。连接到远端的服务。 ACE_SOCK_Acceptor类,扮演被动连接角色,等待连接。等待远端客户的请求。 ACE_SOCK_Stream类,扮演数据通讯角色,发送和接收数据。完成客户与服务之间的通讯。 利用ACE库来开发网络通讯程序是很简单的转载 2009-04-18 12:06:00 · 486 阅读 · 0 评论 -
ACE开发游戏服务器笔记二
上一篇只写了怎么编译ACE,技术难度零星。今天我们先来搭个框架。在win32平台上最有效率的IO模型,莫过于完成端口了。优快云上到处都是关于完成端口的问题。在ACE中对win32平台的完成端口有着非常好的封装。ACE中前摄式框架的win32实现就是使用的完成端口。我们先来看看这个框架有哪些组成部分。ACE_Proactor 前摄器,真怪异的名字。叫异步事件分配者多好啊。ACE_Serv转载 2009-04-18 12:16:00 · 458 阅读 · 0 评论 -
ACE笔记(8) -ACE智能指针
最基本的智能指针需包含如下头文件 #include "ace/Auto_Ptr.h"智能制造使用的目的是为了避免使用指针的复杂性基本使用如下: auto_ptr类型> 变量名 (类型实例或者指向类型实例的指针);如 auto_ptrACE_Reactor> reactor (new ACE_Reactor (impl)); 当使用指向类型实例的指针时,当变量脱离作用范围,会自动释放其拥有指转载 2009-04-18 12:03:00 · 703 阅读 · 0 评论 -
ACE笔记(7) -ACE单体实例、原语、锁、条件变量
首先介绍一下ACE单体实例的概念 所谓单体实例就是一个相当于一个静态全局对象,其生命周期由ACE机制自己管理,所以在main函数中绝对不要调用exit之类的系统底层函数退出主函数,否则会导致这些单体实例不会被释放,默认,ACE会在程序开始时生成一些很常用或者特殊的单体实例 你也可以通过模板技术生成自己的单体类,如下: #include "ace/Auto_Event.h" #inc转载 2009-04-18 12:02:00 · 603 阅读 · 0 评论 -
ACE笔记(5) -ACE_Reactor 机制下的其他事件触发器
检查控制台的输入动作 控制台事件handle :ACE_STDIN 当用户输入回车时会触发信号,执行 handle_signal 方法 通过ACE_OS::read (ACE_STDIN, buffer, sizeof buffer)方法读取用户的输入 检查目录是否发生变化 目录改变事件handle: int change_notification_flags = FILE_NOTI转载 2009-04-18 12:01:00 · 402 阅读 · 0 评论 -
ACE笔记(3) -用ACE_Reactor 实现SOCKET事件处理
ACE_Reactor 反射机制 用 ACE_Reactor 实现SOCKET事件处理 所有需要事件处理的类须继承 ACE_Event_Handler 类, 并实现handle_signal方法,如果必要则要实现 get_handle 方法,表明事件触发对象是什么 当handle_signal方法返回-1时,会调用handle_close方法 通过 ACE_Reactor 的regist转载 2009-04-18 11:59:00 · 985 阅读 · 0 评论 -
ACE_Message_Block功能简介
ACE_Message_Block在Ace中用来表示消息的存放空间,可用做网络通信中的消息缓冲区,使用非常频繁,下面将在如下方简单的介绍一下ACE_Message_Block相关功能。 创建消息块 释放消息块 从消息块中读写数据 数据的拷贝 其它常用函数 1。创建消息块 创建消息块的方式比较灵活,常用的有以下几种方式 : 1。直接给消息块分配内存空间创转载 2009-04-18 11:52:00 · 356 阅读 · 0 评论