可移植性:
使用 LibEvent 编写的程序应该在 LibEvent 支持跨越的所有平台上工作,即使没有更好的方法来处理。
非阻塞式IO:LibEvent也应该支持一般的方法使程序可以运行在某些限制的环境中.
速度:
LibEvent 试图在每一个平台实现最快的非阻塞式 IO,而不会引入太多的额外开销.
可扩展性:
LibEvent 设计为即使在成千上万的 socket 情况下也能良好工作.
方便:
无论在什么情况下,用 LibEvent 来编写程序最自然的方式都应该是稳定可靠的.
LibEvent 由下列组件构成:
evutil:用于抽象出不同平台网络实现的通用功能.
eventandevent_base:libevent 的核心,为各种平台特定的、基于事件的非阻塞IO后端提供抽象 API,
让程序可以知道套接字何时已经准备好,可以读或者写,并且处理基本的超时功能,检测OS信号.
eufferevent:为libevent 基于事件的核心提供使用更方便的封装.除了通知程序套接字已经准备好读写之外,还让程序可以请求缓冲的读写操作,可以知道何时IO已经真正发生.
(bufferevent 接口有多个后端,可以采用系统能够 提供的更快的非阻塞IO方式 ,如Windows 中的 IOCP)
evbuffer:在bufferevent 层之下实现了缓冲功能,并且提供了方便有效的访问函数.
evhttp:一个简单的HTTP 客户端/服务器实现.
evdns:一个简单的DNS 客户端/服务器实现.
evrpc:一个简单的RPC 实现.
创建libevent 时,默认安装下列库:
libevent_core:所有核心的事件和缓冲功能,包含了所有的event_base、evbuffer、bufferevent 和工具函数.
libevent_extra:定义了程序可能需要,也可能不需要的协议特定功能,包括HTTP、DNS和RPC.
libevent:这个库因为历史原因而存在,它包含 libevent_core 和 libevent_extra 的内容 .不应该使用这个库未来版本的libevent。可能去掉这个库.
某些平台上可能安装下列库:
libevent_pthreads:添加基于 pthread可移植线程库的线程和锁定实现.它独立于libevent_core,这样程序使用 libevent 时就不需要链接到 pthread,
除非是以多线程方式使用libevent.
libevent_openssl:这个库为使用 bufferevent 和 OpenSSL 进行加密的通信提供支持。
它独立于 libevent_core,这样 程序使用libevent 时就不需要链接到 OpenSSL,除非是进行加密通信.