ACE Reactor FrameWork使用注意事項

   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;
};
發佈了19 篇原創文章 · 獲贊 16 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章