Libevent:1前言

一:libevent概述:html

        libevent是一个用来编写快速、可移植、非阻塞IO程序的库,它的设计目标是:可移植性、高效、可扩展性、便捷。windows

 

        libevent包含下列组件:后端

        evutil:对不一样平台下的网络实现的差别进行抽象;缓存

        event、event_base:libevent的核心。为各类平台特定的、基于事件的非阻塞IO后端提供抽象API,让程序能够知道套接字什么时候已经准备好读或写,而且处理基本的超时功能,检测OS信号。安全

        bufferevent:为libevent基于事件的核心提供更方便的封装。可使你的程序请求缓存的读和写,让你知道什么时候真正的发生IO,而不是在sockets准备好时通知你。(bufferevent接口拥有多个后端,这样能够有效的利用系统提供的更高速的非阻塞IO方式,好比windows的IOCPAPI。)服务器

        evbuffer:在bufferevent层之下实现了缓冲功能,而且提供了方便有效的访问函数。网络

        evhttp:一个简单的HTTP客户端/服务器实现。多线程

        evdns:一个简单的DNS客户端/服务器实现。socket

        evrpc:一个简单的RPC实现。函数

 

二:库

        当构件libevent时,默认状况下,它会安装下面的库:

        libevent_core:包含全部核心的事件和缓存功能。该库包含了全部的event_base, evbuffer, bufferevent和其余功能函数。        

         libevent_extra:该库定义了特定协议的功能,好比HTTP,DNS和RPC。
         libevent:该库只因历史缘由而存在;他包含了libevent_core 和libevent_extra的内容。该库不该该在使用;它将会在将来的libevent删除。

 

        下面的库只会在某些平台上安装:

        libevent_pthreads:该库基于可移植线程库pthreads,增长了线程和锁的实现机制。它独立于libevent_core,所以,除非你要在多线程中使用libevent,不然不须要链接pthreads库。        

        libevent_openssl:这个库为使用bufferevent和OpenSSL进行加密的通讯提供支持。它独立于libevent_core,所以,除非你确实须要加密通讯,不然不须要链接OpenSSL库。

 

三:头文件

        目前,全部的libevent头文件都安装在event2目录下。头文件分为三类:

        API头文件:定义libevent的共用接口。这些头文件没有特定后缀。

        兼容头文件:包含那些不推荐使用的函数的定义。除非使用较老版本的libevent,不然不须要包含这种头文件。

        结构头文件:这类头文件以相对不稳定的布局定义各类结构体。这些结构体中的一些是为了提供快速访问而暴露;一些是由于历史缘由而暴露。直接依赖这类头文件中的任何结构体都会破坏程序对其余版本libevent的二进制兼容性,有时候是以很是难以调试的方式出现。这类头文件具备后缀“_struct.h”。

        (还存在不在event2目录中的较老版本libevent的头文件,请参考下节:使用老版本libevent)

 

四:使用老版本Libevent

        Libevent 2.0已经通过修订,使其更加合理和健壮,若是可能的话,应该使用Libevent2.0的API。可是某些时候,你可能不得不使用老版本的API。

        老版本的Libevent的头文件较少,并且没有安装在event2目录下:

OLD HEADER…

…REPLACED BY CURRENT HEADERS

event.h

event2/event*.h, event2/buffer*.h event2/bufferevent*.h event2/tag*.h

evdns.h

event2/dns*.h

evhttp.h

event2/http*.h

evrpc.h

event2/rpc*.h

evutil.h

event2/util*.h

        在2.0以及之后版本的libevent中,老的头文件仍然会做为新头文件的封装而存在。

 

        其余关于使用较老版本的提示:

        1.4版以前只有一个库libevent,它包含如今分散到libevent_core和libevent_extra中的全部功能。

        2.0版以前不支持锁:只有肯定不一样时在多个线程中使用同一个结构体时,libevent才是线程安全的。

 

原文:http://www.wangafu.net/~nickm/libevent-book/Ref0_meta.html

参考:http://blog.csdn.net/laoyi_grace/article/details/6534202

相关文章
相关标签/搜索