现在高性能网络服务器基本都是异步I/O模式构建的,而Libevent就是对select、poll、epoll等各类异步模式接口的封装,通过设置回调函数的方式,在监听文件描述符和套接字读写事件的同时,还兼任定时器和信号接收的管理工作。
所以Libevent对高性能服务器后台开发、跨平台开发、网络开发都具有很大的参考学习价值。官方主页显示很多的项目都用到了Libevent库,而且还可作为主机内部进程间通信和数据交互。Libevent也考虑到pthread线程模型的同步问题,保证关键数据结构在多线程并行下的数据安全!
libevent 由下列组件构成:
evutil:用于抽象不同平台网络实现差异的通用功能。
event 和event_base:libevent 的核心,为各种平台特定的、基于事件的非阻塞IO 后端提供抽象API,让程序可以知道套接字何时已经准备好,可以读或者写,并且处理基本的超时功能,检测OS 信号。
bufferevent:为libevent 基于事件的核心提供使用更方便的封装。除了通知程序套接字已经准备好读写之外,还让程序可以请求缓冲的读写操作,可以知道何时IO 已经真正发生。(bufferevent 接口有多个后端,可以采用系统能够提供的更快的非阻塞IO 方式,如Windows 中的IOCP。)
evbuffer:在bufferevent 层之下实现了缓冲功能,并且提供了方便有效的访问函数。
evhttp:一个简单的HTTP 客户端/服务器实现。
evdns:一个简单的DNS 客户端/服务器实现。
evrpc:一个简单的RPC 实现
ubuntu上安装libevent只需输入以下命令:
sudo apt-get install libevent-dev
也可以直接到官网上下载源码包来安装。http://libevent.org/
#在当前目录下解压安装包: tar -zxvf libevent-2.0.22-stable.tzr.gz cd libevent-2.0.22-stable #配置安装库的目标路径: ./configure --prefix=/usr #编译安装libevent库: make make install #查看libevent库是否安装成功: ls -al /usr/lib | grep libevent
通过函数event_get_version()可以查看libevent的版本。