libevent高性能网络库源码分析——介绍(一)
2016-04-17 21:29
351 查看
libevent介绍
libevent源代码结构
事件驱动,基于高性能的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【下载地址】
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参考手册(中文版)
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参考手册(中文版)
相关文章推荐
- 多层网络和反向传播笔记
- 计算机网络中的TCP/UDP协议到底是怎么回事(二)
- 广东工业大学网络赛F题, 容斥原理+DFS
- HTTP实现长连接(TTP1.1和HTTP1.0相比较而言,最大的区别就是增加了持久连接支持Connection: keep-alive)
- 20159320《网络攻防实践》第7周学习总结
- 20159320《网络攻防实践》第7周视频总结
- 20159320《网络攻防实践》第7周教材总结
- 广东工业大学网络赛E题 思维题
- 一次完整的HTTP请求所经历的7个步骤(前三步是浏览器工作,后四步是服务器工作)
- CentOS 7.0系统安装配置步骤及网络开启配置详解
- HTTP数据包头解析(简单清楚)
- Http请求工具实例编写(超长,比较清楚)
- 学习信息资源管理和计算机网络有感
- 计算机网络中的一些概念
- 《Deep Learning》译文 第一章 前言(中) 神经网络的变迁与称谓的更迭
- 关于Android:http.conn.httpHostconnectException错误
- 各个网络协议汇总(01)
- Linux网络协议栈之TCP send/recv
- android studio 网络定位城市名称
- 常用的HTTP状态代码