基於epoll封裝的事件回調miniserver

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

關注個人公衆號平臺,按期推送技術總結

相關文章
相關標籤/搜索