基於epoll封裝的事件回調miniserver


epoll技術前兩節已經闡述過了,目前主要做一下封裝,很多epoll的服務器都是采用事件回調方式處理,

其實並沒有什么復雜的,我慢慢給大家闡述下原理。

在networking.h和networking.cpp里,這兩個文件主要實現了一些文件讀寫功能的回調函數

 

acceptCallBack 負責新的描述符連接上來進行回調,

readCallBack 負責讀操作回調

writeCallBack 負責寫操作回調

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

關注我的公眾號平台,定期推送技術總結

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM