ACE Reactor FrameWork使用注意事项

来源:互联网 发布:风控模型用什么算法 编辑:程序博客网 时间:2024/06/07 14:18
   Ace Reactor framework 是ACE 提供的一个相对比较简单的网络服务器框架,它简化了基于事件驱动的应用程序的开发,这些程序包括了网络应用程序。这些应用程序中的事件一般包括 因io操作而产生的进程间通信流,Posix 信号,Windows 句柄信号,计时器过期信号。ACE Reacttor  framework 负责 发现各种事件源产生的事件, 把各种事件分用到先前已经注册好的事件处理器中,派发处理器定义的钩子方法去处理已经发生的事件。    
     涉及到的类图如下:

 在使用时,需要从ACE_Event_Handler 中派生成两个类,可以分别 为  class clientAcceptor : public ACE_Event_Handler
,class clientService : public ACE_Event_Handler,clientAcceptor 用来接受客户端的连接,clientService  用于表示客户端,负责处理客户端的请求,并且发送服务器的响应给客户端。
     在派生 clientAcceptor  和 clientService ,需要重写以下几个函数。

#include "ace/event_handler.h"    //头文件定义了ACE_Event_Handler 
#include "ace/SOCK_Acceptor.h" //头文件定义了 ACE_SOCK_Acceptor 
#include "ace/Reactor.h"

class clientAcceptor :  public ACE_Event_Handler
{
public:
 clientAcceptor(void);
 clientAcceptor(ACE_Reactor * r);
 ~clientAcceptor(void);

 int open(const ACE_INET_Addr & listen_addr);

 int handle_input(ACE_HANDLE h); // virtual function,need overWritten;
 
 int handle_close(ACE_HANDLE h,ACE_Reactor_Mask m); // virtual function,need overWritten;

 virtual  ACE_HANDLE get_handle(void) const  // virtual function,need overWritten;  //必须写成这个格式
 {
  return this->acceptor.get_handle();
 }
protected:
 ACE_SOCK_Acceptor  acceptor;  //一定要有,acceptor ,用于接受客户端的连接;

};

#include "ace/Event_Handler.h"
#include "ace/Message_Block.h"
#include "ace/Message_Queue.h"
#include "ace/SOCK_Stream.h"  //头文件定义了 ACE_SOCK_Stream 
#include "ace/Reactor.h"
#include "ace/Synch.h"
 
#ifndef  CLIENTSERVICE_H
#define  CLIENTSERVICE_H
class clientService : public ACE_Event_Handler
{
public:
 clientService(void);
 clientService(ACE_Reactor * r);
 
 ACE_SOCK_Stream  &peer() { return this->sock_; }
  ~clientService();
  int open();

 // Get this handler's I/O handle.
 virtual ACE_HANDLE get_handle (void) const  //必须写成这个格式
 { return this->sock_.get_handle (); }
 
 int handle_input(ACE_HANDLE h);

 int handle_output(ACE_HANDLE h);

 int handle_close(ACE_HANDLE h);
private:
 ACE_SOCK_Stream sock_;  // 一定要有,用于客户端的通信,获取客户端请求,发送服务器数据给客户端
 ACE_Message_Queue <ACE_NULL_SYNCH> output_queue;
};
0 0
原创粉丝点击