epoll技術前兩節已經闡述過了,目前主要作一下封裝,不少epoll的服務器都是採用事件回調方式處理,api
其實並無什麼複雜的,我慢慢給你們闡述下原理。服務器
在networking.h和networking.cpp裏,這兩個文件主要實現了一些文件讀寫功能的回調函數函數
。oop
acceptCallBack 負責新的描述符鏈接上來進行回調,.net
readCallBack 負責讀操做回調3d
writeCallBack 負責寫操做回調blog
initListenSocket 負責初始化描述符的基本信息隊列
setNonblock負責設置描述符非阻塞事件
bindListenSocket負責綁定描述符回調函數
實現以下
這些回調函數會賦值給EventLoop 的proc裏,實現綁定,由於之後要回調
creatEventLoop爲了建立而且初始化一個eventLoop
deleteEventLoop刪除一個eventloop
CreateFileEvent將一個fd綁定到對應的epoll事件中,而且綁定fd對應的FileEvent事件類型和回調函數
DeleteFileEvent將一個fd解綁epoll事件,而且解綁fd對應的fileEvent事件類型和回調函數
ProcessEvents,輪詢處理全部epoll就緒事件,而且調用以前註冊好的回調函數
實現以下
上一部分將文件描述符加入epoll監聽隊列,以及從監聽隊列刪除對應fd,或者輪詢就緒事件都被我封裝在apiepoll.h
和apiepoll.cpp裏。
ApiState是基於epoll封裝的結構體
epfd表示epoll create產生的句柄
events表示epoll監聽的事件隊列,這個大小能夠本身開闢,通常都是
最大的客戶端鏈接數+保留的一部分空間
ApiCreate表示建立epoll結構和句柄,將數據存儲到eventLoop裏
ApiResize從新開闢epoll序列大小
ApiFree釋放epoll events
ApiAddEvent 將事件類型添加到epoll監聽序列裏
ApiDelEvent 將事件類型從epoll監聽序列裏刪除
ApiPoll,就是epoll調用epoll_wait,返回就緒事件隊列
輪詢處理,回調函數就能夠了
源代碼下載地址:http://download.csdn.net/detail/secondtonone1/9502252
關注個人公衆號平臺,按期推送技術總結