您的位置:首页 > 理论基础 > 计算机网络

libevent高性能网络库源码分析——介绍(一)

2016-04-17 21:29 351 查看
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参考手册(中文版)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: