ACE反應器模型的應用 TCP伺服器的設計

2021-04-30 06:18:48 字數 1938 閱讀 6109

設計 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...