Libevent:1前言

一:libevent概述:

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

 

        libevent包含下列组件:

        evutil:对不同平台下的网络实现的差异进行抽象;

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

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

        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:该库基于可移植线程库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

 

 

原文地址:https://www.cnblogs.com/gqtcgq/p/7247262.html