前言:Libevent 参考手册
Libevent是一个提供快速可移植的非堵塞IO库,它设计的目标是:
1、可移植性
使用libevent写的程序,应该在所有支持Libevent平台上有效,甚至在没有真正好的方法进行非堵塞IO时,Libevent也应该支持这种方式,所以你的程序可以在有限的环境下运行。
2、 高效性
该库在每个平台上尝试使用最快且可用的非堵塞IO实现,同时不会引入很大的开销。
3、 可扩展性
Libevent被设计成在程序中需要数以千计socket连接时也能正常运行。
4、易用性
任何条件允许情况下,使用Libevent库编写函数都应该是稳定、可移植的。
Libevent库被分为以下部分:
1、evutil
通用功能抽象出不同平台网络实现的不同之处。
2、Event 和event_base
这是库Libevent的核心,对各种特殊平台提供了抽象API,基于事件的非堵塞IO支持。
你可以知道何时socket是可写或者可读的,做基本的超时判断,并检测操作系统信号。
4、 bufferevent
这些函数提供了围绕Libevent event_based为核心的简便包装,可以使你的应用程序请求缓冲区的读写,而不是在socket准备好读写时通知你,它让你知道IO何时实际发生了。
Bufferevent接口同样有多样的后端,这样可以充分利用系统提供的更快捷方式进行非堵塞IO,例如windows下的IOCP
5、 evbuffer
该模块实现了基于bufferevent的缓冲区,提供了有效快捷的接口函数。
6、 Evhttp
简单的HTTP client/server 实现
7、 evdns
简单的DNS client/server实现
8、 evrpc
简单的RPC实现。
Libevent库
构建库时,默认情况下以下库会被安装:
Libevent_core
所有的核心事件和缓存功能,该库包含所有的event_base,evbuffer,bufferevent,和utility函数。
Libevent_extra
该库定义了特殊协议函数,你的程序可能用到也可能没用到,包括HTTP,DNS和RPC
Libevent
由于历史原因,该库还存在,它同时包含libevent_core和libevent_extra,你不应该用它,在将来版本中可能会删除。
以下几个库只在一些平台上安装:
Libevent_pthreads
该库添加了线程和锁的实现,基于线程库,它是同libevent_core有分开的,这样你可以不必连接pthreads来使用libevent库,除非在你确实需要使用多线程时再链接线程库。
Libevent_openssl
该库提供了使用bufferevents和OpenSSl库的加密传输,同样它同libevent_core分开,这样若不需要就不用加载该库,除非实际中确实需要
头文件:
当前所有的共有头文件都在event2路径下,这些头文件被分为三类:
1、 API头文件
API头文件定义库当前公共接口,这些头文件没有特殊后缀
2、 兼容性头文件
兼容性头文件包含函数声明的定义,一般不需要包含该类头文件
3、 结构头文件
这些头文件定义了结构体,使用相对随意的布局方式,其中一些是为了防止你要快速访问结构体组成,一些是由于历史原因而存在,依赖其中任何一个结构体都可能直接破坏你程序同libevent其它版本的兼容性,有时候调试都很难找出来,这些头文件有后缀”_struct.h”