基于epoll封装的事件回调miniserver

简介: epoll技术前两节已经阐述过了,目前主要做一下封装,很多epoll的服务器都是采用事件回调方式处理,其实并没有什么复杂的,我慢慢给大家阐述下原理。在networking.h和networking.cpp里,这两个文件主要实现了一些文件读写功能的回调函数。

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

关注我的公众号平台,定期推送技术总结

目录
相关文章
|
10天前
在 onerror 事件处理函数中停止接收数据
【10月更文挑战第26天】关闭 WebSocket 连接后,客户端将不再接收来自服务器的数据,同时服务器端也会收到连接关闭的通知。在实际应用中,需要根据具体的业务场景和错误处理需求来选择合适的方法来停止接收数据,以确保应用程序的稳定性和数据的一致性。
|
6月前
|
存储 Java Linux
Android系统获取event事件回调等几种实现和原理分析
Android系统获取event事件回调等几种实现和原理分析
336 0
|
6月前
|
JavaScript 前端开发 编译器
方法事件处理器
方法事件处理器
|
6月前
|
API
epoll监听信号事件-signalfd
epoll监听信号事件-signalfd
68 0
回调函数是异步吗?回调函数和异步操作的关系
回调函数是异步吗?回调函数和异步操作的关系
【EventBus】事件通信框架 ( 发送事件 | 根据事件类型获取订阅者 | 调用订阅方法 )
【EventBus】事件通信框架 ( 发送事件 | 根据事件类型获取订阅者 | 调用订阅方法 )
136 0
【EventBus】EventBus 源码解析 ( 事件发送 | postToSubscription 方法 | EventBus 线程模式处理细节 )
【EventBus】EventBus 源码解析 ( 事件发送 | postToSubscription 方法 | EventBus 线程模式处理细节 )
134 0
|
Java
【EventBus】EventBus 源码解析 ( 事件发送 | 线程池中执行订阅方法 )
【EventBus】EventBus 源码解析 ( 事件发送 | 线程池中执行订阅方法 )
194 0