基于epoll封装的事件回调miniserver
2016-04-25 19:45
260 查看
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
关注我的公众号平台,定期推送技术总结
其实并没有什么复杂的,我慢慢给大家阐述下原理。
在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
关注我的公众号平台,定期推送技术总结
相关文章推荐
- 个人博客总结7
- Codeforces Round #347 (Div. 2) C. International Olympiad(求第一次出现这种数字结尾的是哪一个年份)
- Android热修复技术链接收集
- IO流学习
- Masonry介绍与使用实践(快速上手Autolayout)
- mips 的内存映射问题
- HDU 1166 敌兵布阵
- leetcode 345Reverse vowels of a string
- Impala与Hive的比较
- Java面试中的多线程问题
- 第一次冲刺阶段(八)
- react-redux单元测试(基于react-addons-test-utils,mocha)
- vs中正常IIS发布网站后css样式、图片丢失jQuery报错 $ is not defined
- 最短路模板(Dijkstra & Dijkstra算法+堆优化 & bellman_ford & 单源最短路SPFA)
- 拆点最大流-POJ-3436-ACM Computer Factory
- bnu 51638 Air Hockey(三分+二分)(北师16校赛)
- [动态树分治]
- 地图使用-----MapKit介绍
- Git远程和分支管理
- 大数据 > 数据平台方案评估