总览
Libevent适用于开发可移植高速非阻塞IO程序,它的设计理念:
移植
一个使用Libevent的程序能跨平台运行。即使没有更好的方式来实现非阻塞IO,Libevent也能凑合用,让你的程序在资源有限的环境下运行。速度
Libevent尝试在不同平台上选择效率最好的方式来实现非阻塞IO,且不增加额外的开销。(比如,在linux下,libevent封装了epoll,但相对epoll,libevnet不要求更多开销)伸缩性
Libevent在设计上就是为了能支撑千万级别的sock IO。使用方便
使用起来很稳定、轻巧。
Libevent划分成下面几个部分
evutil
把不同平台的网络实现智能地抽象和封装起来。event和event_base
Libevent的核心。 他们提供的接口,封装了不同平台上基于事情驱动、非阻塞IO的实现,当sock可读写、事件超时,或者有信号到来的时候通知你的程序。bufferevent
这部分的函数对Libevent的事件驱动核心做了一个更为方便的封装,提供带buffer的sock读和写。
bufferevent也对不同平台的高速非阻塞IO的实现都做了封装,包括Windows IOCP API,这样可以在不同平台上使用该平台提供的高速非阻塞IO实现。evbuffer
这个模块实现bufferevent的buffer,提供各种更高效的或更方便的读写buffer函数。evhttp
一个简单的HTTP客户端/服务端实现。evdns
一个简单的DNS客户端/服务端实现。evrpc
一个简单的RPC实现。
库文件Libraries
当安装Libevent,默认安装下面的库文件:
libevent_core
包含核心的event(事件)和buffer(缓冲)功能,包含所有的event_base, evbuffer, buffereven和各种辅助函数。libevent_extra
定义了一些平台相关的函数,你也许不会用到,包含HTTP, DNS, RPc。libevent
因历史原因才存在的库文件,包含了上面2个库文件的内容,但你不应该再使用这个库文件了,在未来的版本中它或许不再使用。
下面的库文件只在一些平台上才安装:
libevent_pthreads
基于pthreads(linux平台)这个线程库,封装了线程和锁。这个库从libevent_core分离出来,这样的话,如果你不是在linux上使用线程,在链接时你可以不使用这个库文件。libevent_openssl
使用bufferevents和开源的OpenSSL,提供加密环境。如果你不使用OpenSSL, 你也不用链接这个库文件。
头文件Headers
当前Libevent提供的头文件都再<event>
这个目录下,可以归类成三大类:
API headers
定义程序可以使用的接口,在命名上,这里的接口没有带特殊的后缀。Compatibility headers
为了兼容才提供的头文件,你不应该使用这里的定义,除非你再移植一个使用了旧版本Libevent的程序。Structure headers
定义各种可能会改变的数据结构。为了方便你查看,一些数据结构的定义公开出来,但一些则是因为历史原因才公开出来。假若在你的程序代码里直接使用这里定义的数据结构,那你的程序将不能跟其他Libevent兼容,且难以debug。 这些头文件有一个后缀_struct.h
.
在<event>
目录之外也有其他旧版本的头文件。
如果你使用的是旧版本
略。(主要是讲旧版本的头文件被替换成新的文件后,新文件名是什么,若有兴趣请查看原文)
一些旧版本的说明
简单说来,请使用2.0或以后的版本。
– EOF –