設計 tcp 伺服器需要設計兩個事件處理器,乙個用來監聽客戶端的連線,另乙個當連線建立後用來處理與客戶端的通訊。
圖表 2 ‑ 3
tcp_server_event_handler 的 handle_input 用來處理當有客戶端連線時建立新連線。
tcp_peer_event_handler 用來處理建立起來的連線的通訊。 handle_input 響應輸入事件, handle_output 處理輸出事件。
圖表 2 ‑ 4
**如下:
tcp_server_event_handler.h
#ifndef tcp_server_event_handlerh
#define tcp_server_event_handlerh
#include
#include
#include
#include
class tcp_server_event_handler:public ace_event_handler
tcp_server_event_handler(int port);
~tcp_server_event_handler()
private:
ace_sock_acceptor acceptor_;
};#endif
tcp_server_event_handler.cpp
#include "tcp_server_event_handler.h"
#include "tcp_peer_event_handler.h"
int tcp_server_event_handler::handle_input(ace_handle fd)
tcp_server_event_handler::tcp_server_event_handler(int port)
tcp_peer_event_handler.h:
#ifndef tcp_peer_event_handlerh
#define tcp_peer_event_handlerh
#include
#include
#include
#include
class ace_peer_event_handler:public ace_event_handler
ace_sock_stream& stream()
private:
ace_sock_stream stream_;
};#endif
tcp_peer_event_handler.cpp:
#include
#include "tcp_peer_event_handler.h"
int ace_peer_event_handler::handle_input(ace_handle fd)
buf[i] = 0;
std::cout << buf << std::endl;
stream_.send(buf,i);
return 0; }
int ace_peer_event_handler::handle_output(ace_handle fd)
int ace_peer_event_handler::handle_close(ace_handle handle, ace_reactor_mask close_mask)
main.cpp:
#include "tcp_server_event_handler.h"
int main(int argc, char* argv)
ACE的反應器模型
1為什麼要反應器模型 前面的文章有個共同的特點,那就是針對一對一的通訊情況,甚至雙方通訊的先後都是定式的。對於要處理多個輸入輸出 網路連線,傳統的應用都要建立新的併發單元 程序或執行緒 每個輸入輸出 網路連線乙個併發單元。這可以很好的工作,但是帶來的執行時開銷也是很大的,在一些情況下,是無法接受的。...
ACE反應器模型的應用 定時器
反應器的 schedule timer 函式用來設定乙個定時事件,當時間到達時 事件處理器的 handle timeout 處理函式。schedule timer 的原型如下 schedule timer ace event handler event handler,const void arg,...
ACE反應器模型的應用 UDP通訊的設計
udp 通訊的特點是無連線。這裡只要乙個處理器 udp peer event handler 用來監聽是否有資料報。圖表2 5 圖表2 6 如下 udp peer event handler.h ifndef udp peer event handlerh define udp peer event...