Libevent库是用来开发高效,可移植的非阻塞IO。它的设计目标:
1. 可移植性
2. 高效性:Libevent试图使用每一个平台上的最高效的非阻塞IO的实现
3. 可扩大性:Libevent被设计成,即便程序需要去处理上万条活跃的socket也能运行良好。
4. 方便性:不管在甚么情况下,用最正常的方式去用libevent写1个程序,都可能稳定,可移植。
Libevent库包括以下几个模块:
1. evutil:通用的功能,已抽象出不同平台之间的差异。
2. event和event_base:相当于libevent的心脏。为各个平台的基于事件的非阻塞IO提供了1个统1的接口。当socket准备好读或写,或产生超时,或当有系统信号抵达,它都会通知你。
3. bufferevent:这些方法为libevent的event-based核心提供了更方便的包装。它让你主动去要求已缓冲的读和写,而不是当IO产生时,才去通知你这些已准备好了。
bufferevent接口也能够有多个后端,所以它可以充分发挥系统的优势,提供更高效的非阻塞IO,就像Windows的IOCP接口。
4. evbuffer:这个模块实现的是bufferevent下面的buffer,提供了可方便,高效访问的方法。
5. evhttp:简单的HTTP客户端、服务器的实现。
6. evdns:简单的DNS客户端、服务器的实现。
7. evrpc:简单的RPC实现。
库
当Libevent被构建时,默许的它需要安装以下几个类库
1. libevent_core:所有的核心event和buffer相干方法。包括所有的event_base,evbuffer,bufferevent,还有通用方法。
2. libevent_extra:定义了协议相干的方法。在你的代码里可能需要用到,包括HTTP,DNS,RPC。
3. libevent:历史遗漏,不应当使用。在将来的版本中可能会被去掉。
下面的库可能在某些平台上用到:
1. libevent_pthreads:在pthread的可移植线程库的基础上增加了线程和锁的实现。它跟libevent_core是分开的,如果你不使用多线程的方式使用libevent,你不需要去链接pthread库。
2. libevent_openssl:这个库通过封装bufferevents和OpenSSL库,提供了对加密链接的支持。它跟libevent_core也是分开的,如果你不使用加密链接,就不需要去链接OpenSSL库。
头文件
目前所有的公共头文件都在event2目录下。头文件被分为3大类:
1. API头文件:定义了Libevent的公共接口。这些头文件没有特殊后缀。
2. 兼容性头文件:包括了1些已废弃的方法。如果不是从1个旧版本移植程序,不建议包括它。
3. 结构体头文件:定义了结构体。其中1些是用来快速访问的,还有1些是由于历史缘由被暴露出来。有了这些结构体的定义,你可以方便的调试。这些头文件带有后缀"_struct.h"。