libevent高性能网络库源码分析——介绍(一)
来源:互联网 发布:人工智能介绍 编辑:程序博客网 时间:2024/06/09 21:01
- libevent介绍
- libevent源代码结构
libevent介绍
Libevent是一个开源的轻量级高性能网络库,基于C语言编写。该网络库基于事件驱动,具有如下优点:
- 事件驱动,基于高性能的Reactor(反应器)模型;
- 跨平台,支持 Windows、Linux和 Mac Os;
- 支持多种 I/O多路复用技术 epoll、poll、dev/poll、select 和kqueue 等,对I/O多路复用进行了封装,使得在不同的平台上均能高效的运行;
- 支持 I/O,定时器和信号等事件;
- 注册事件优先级。在注册事件时可以配置响应事件的优先级;
- libevent 轻量级,可在其基础上进行二次开发,作为底层的网络库;比如 memcached、Vomit、Nylon、Netchat等。
当前libevent版本为2.0.22,【官网】及libevent【下载地址】
libevent源代码结构
- evutil:用于抽象不同平台网络实现差异的通用功能。
- event和event_base: libevent的核心,为各种平台特定的、基于事件的非阻塞 IO后
端提供抽象API, 让程序可以知道套接字何时已经准备好, 可以读或者写, 并且处理基
本的超时功能,检测OS信号。 - bufferevent: 为libevent基于事件的核心提供使用更方便的封装。除了通知程序套接字已经准备好读写之外, 还让程序可以请求缓冲的读写操作, 可以知道何时IO已经真正发生。( bufferevent接口有多个后端, 可以采用系统能够提供的更快的非阻塞 IO方式,如Windows中的IOCP。)
- evbuffer:在bufferevent层之下实现了缓冲功能,并且提供了方便有效的访问函数。
- evhttp:一个简单的HTTP客户端/服务器实现。
- evdns:一个简单的DNS客户端/服务器实现。
- evrpc:一个简单的RPC实现。
具体的源文件,主要包括:
- libevent框架:event.h, event.c
- 内部使用的文件:xxx-internal.h
- I/O多路复用机制:epoll.c, poll.c, select.c, devpoll.c, kqueue.c
- 信号管理:signal.c
- 定时事件管理:min-heap.h,即以时间作为 key的小根堆结构
- 缓冲区管理 :evbuffer.c 和buffer.c,即libevent 对缓冲区的封装
- 日志:log.c, log.h
- 基本的数据结构:compat\sys 下的两个源文件: queue.h是 libevent 基本数据结构的实现,包括链表,双向链表,队列等;libevent_time.h:一些用于时间操作的结构体定义、函数和宏定义。
- 实用网络库:http.c 和evdns.c,即基于 libevent 实现的http 服务器和异步 dns 查询库
- 辅助功能函数:evutil.h 和 evutil.c:主要有socket相关操作、读写文件和时间操作函数等。
本文参考了:libevent参考手册(中文版)
0 0
- libevent高性能网络库源码分析——介绍(一)
- libevent高性能网络库源码分析——Reactor模式(二)
- libevent高性能网络库源码分析——事件(event)及其接口(三)
- libevent高性能网络库源码分析——事件处理框架(四)
- libevent高性能网络库源码分析——事件循环(五)
- Libevent-2.1.8源码分析——event_base(一)
- 高性能服务器(libevent网络库)
- 【原创 】高性能网络库Libevent初探
- Libevent源码分析(一)--- 基本数据结构
- 高性能I/O框架库Libevent源码学习
- 转载和积累系列 - 高性能网络库Libevent初探
- 高性能网络编程(一)—-ACCEPT建立连接
- 【libevent】libevent库学习总结(一)——基础
- Libevent-2.1.8源码分析——event_base(二)
- Libevent源码剖析一——引子
- 高性能网络数据捕获:netsniff-ng源码分析
- 高性能网络I/O框架-netmap源码分析(1)
- 高性能网络I/O框架-netmap源码分析(2)
- 使用Log4Net记录日志
- boost的pool内存池
- 爬虫抓取BestCoder的比赛排名
- 互联网产品经理职责及所需能力
- spark streaming wordcount
- libevent高性能网络库源码分析——介绍(一)
- 使用pycaffe 对caffemodel 参数进行读取
- 第八周 【项目1 - 数组作数据成员】1
- C++类型转换运算符之const_cast<newtype>(expression)
- Messenger
- Hdu2509 反NIM博弈
- Codeforces Round #347 (Div. 2) B Rebus (贪心构造)
- Eclipse依赖打包问题
- 第4章--Toast提醒控件的使用