高性能的I/O框架庫libevent
在處理這些事件時要考慮三個問題:
1 統一事件源
2 可移植性 不同系統使用不同的I/O複用方式
3 多進程/多線程中高併發編程的支持
I/O框架庫以庫函數的方式封裝了相對底層系統調用,爲應用程序提供便利的接口,
這些庫函數比較高效,健壯,穩定
libevent庫的特點:
1 跨平臺支持
2 統一事件源
3 線程安全
4 基於Reactor模式實現
幾個組件:
1 句柄
一個事件源和一個句柄綁定在一起,I/O事件對應的是文件描述符,信號對應的是信號值
2 事件多路分發器
將系統支持的I/O複用封裝成統一的接口,稱爲事件多路分發器
進行事件循環:等待事件並處理事件
3 事件處理器
具體事件處理器
事件發生後執行的具體事件處理函數,在回調函數中執行具體的業務邏輯
4 Reactor
是libevent的核心
handle_event 事件循環
register_handler 往事件多路發生器中註冊一個事件
remove_handler 從事件多路分發器中刪除一個事件
//創建reactor 統一事件源 socket I/O,信號,定時器
struct event_base* base = event_init();
//創建event事件
struct event *listen_event = event_new(base, listenfd, EV_READ|EV_PERSIST, ProcListenfd, NULL);
//把event事件添加到reactor中
event_add( listen_event, NULL );
//啓動反應堆
event_base_dispatch(base);//循環事件,如果事件發生進行處理
//釋放事件資源
event_free(listen_event);
//關閉reactor
event_base_free(base);