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

来源:互联网 发布:人工智能介绍 编辑:程序博客网 时间:2024/06/09 21:01

      • libevent介绍
      • libevent源代码结构

libevent介绍

Libevent是一个开源的轻量级高性能网络库,基于C语言编写。该网络库基于事件驱动,具有如下优点:
  1. 事件驱动,基于高性能的Reactor(反应器)模型;
  2. 跨平台,支持 Windows、Linux和 Mac Os;
  3. 支持多种 I/O多路复用技术 epoll、poll、dev/poll、select 和kqueue 等,对I/O多路复用进行了封装,使得在不同的平台上均能高效的运行;
  4. 支持 I/O,定时器和信号等事件;
  5. 注册事件优先级。在注册事件时可以配置响应事件的优先级;
  6. libevent 轻量级,可在其基础上进行二次开发,作为底层的网络库;比如 memcached、Vomit、Nylon、Netchat等。

当前libevent版本为2.0.22,【官网】及libevent【下载地址】

libevent源代码结构

  1. evutil:用于抽象不同平台网络实现差异的通用功能。
  2. event和event_base: libevent的核心,为各种平台特定的、基于事件的非阻塞 IO后
    端提供抽象API, 让程序可以知道套接字何时已经准备好, 可以读或者写, 并且处理基
    本的超时功能,检测OS信号。
  3. bufferevent: 为libevent基于事件的核心提供使用更方便的封装。除了通知程序套接字已经准备好读写之外, 还让程序可以请求缓冲的读写操作, 可以知道何时IO已经真正发生。( bufferevent接口有多个后端, 可以采用系统能够提供的更快的非阻塞 IO方式,如Windows中的IOCP。)
  4. evbuffer:在bufferevent层之下实现了缓冲功能,并且提供了方便有效的访问函数。
  5. evhttp:一个简单的HTTP客户端/服务器实现。
  6. evdns:一个简单的DNS客户端/服务器实现。
  7. evrpc:一个简单的RPC实现。

具体的源文件,主要包括:

  1. libevent框架:event.h, event.c
  2. 内部使用的文件:xxx-internal.h
  3. I/O多路复用机制:epoll.c, poll.c, select.c, devpoll.c, kqueue.c
  4. 信号管理:signal.c
  5. 定时事件管理:min-heap.h,即以时间作为 key的小根堆结构
  6. 缓冲区管理 :evbuffer.c 和buffer.c,即libevent 对缓冲区的封装
  7. 日志:log.c, log.h
  8. 基本的数据结构:compat\sys 下的两个源文件: queue.h是 libevent 基本数据结构的实现,包括链表,双向链表,队列等;libevent_time.h:一些用于时间操作的结构体定义、函数和宏定义。
  9. 实用网络库:http.c 和evdns.c,即基于 libevent 实现的http 服务器和异步 dns 查询库
  10. 辅助功能函数:evutil.h 和 evutil.c:主要有socket相关操作、读写文件和时间操作函数等。

本文参考了:libevent参考手册(中文版)

0 0