一: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

Libevent:1前言的更多相关文章

  1. libevent源码深度剖析

    原文地址: http://blog.csdn.net/sparkliang/article/details/4957667 第一章 1,前言 Libevent是一个轻量级的开源高性能网络库,使用者众多 ...

  2. 轻量级网络库libevent概况

    Libevent is a library for writing fast portable nonblocking IO. libevent是一个为编写快速可移植的非阻塞IO程序而设计的. lib ...

  3. libevent和libcurl实现http和https服务器 cJSON使用

    前言 libevent和libcurl都是功能强大的开源库:libevent主要实现服务器,包含了select.epoll等高并发的实现:libcurl实现了curl命令的API封装,主要作为客户端. ...

  4. libevent(了解)

    1 前言 Libevent是一个轻量级的开源高性能网络库,使用者众多,研究者更甚,相关文章也不少.写这一系列文章的用意在于,一则分享心得:二则对libevent代码和设计思想做系统的.更深层次的分析, ...

  5. libevent源码深度剖析四

    libevent源码深度剖析四 ——libevent源代码文件组织 1 前言 详细分析源代码之前,如果能对其代码文件的基本结构有个大概的认识和分类,对于代码的分析将是大有裨益的.本节内容不多,我想并不 ...

  6. libevent源码深度剖析三

    libevent源码深度剖析三 ——libevent基本使用场景和事件流程 张亮 1 前言 学习源代码该从哪里入手?我觉得从程序的基本使用场景和代码的整体处理流程入手是个不错的方法,至少从个人的经验上 ...

  7. libevent源码深度剖析一

    libevent源码深度剖析一 ——序幕 张亮 1 前言 Libevent是一个轻量级的开源高性能网络库,使用者众多,研究者更甚,相关文章也不少.写这一系列文章的用意在于,一则分享心得:二则对libe ...

  8. Libevent:11使用Libevent的DNS上层和底层功能

    Libevent提供了一些API用来进行DNS域名解析,并且提供了实现简单DNS服务器的能力. 本章首先描述域名解析的上层功能,然后介绍底层功能及服务器功能. 注意:Libevent的当前DNS客户端 ...

  9. Linux下Libevent安装和简单实用

    前言 Libevent 是一个用C语言编写的.轻量级的开源高性能事件通知库,主要有以下几个亮点:事件驱动( event-driven),高性能;轻量级,专注于网络,不如 ACE 那么臃肿庞大:源代码相 ...

随机推荐

  1. DAO设计模式总结

    1.DAO(Data Access Object,数据访问对象),主要的功能是用于进行数据操作的,在程序的标准开发框架中属于数据层的操作. 数据开发结构流程: 资源层是数据库的操作层,里面可以进行各种 ...

  2. 四种基本组合博弈POJ1067/HDU1846

    取石子游戏 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 43466   Accepted: 14760 Descripti ...

  3. 洛谷 P3956 棋盘

    题目描述 有一个m ×m的棋盘,棋盘上每一个格子可能是红色.黄色或没有任何颜色的.你现在要从棋盘的最左上角走到棋盘的最右下角. 任何一个时刻,你所站在的位置必须是有颜色的(不能是无色的), 你只能向上 ...

  4. sulin LuceneNet 搜索二

    1.添加引用dll using Lucene.Net.Search;using Lucene.Net.Analysis.PanGu;using PanGu;using PanGu.HighLight; ...

  5. Vue.js系列之项目搭建(vue2.0 + vue-cli + webpack )

    1.安装node node.js环境(npm包管理器) cnpm npm的淘宝镜像 从node.js官网下载并安装node,安装过程很简单,一路“下一步”就可以了(傻瓜式安装).安装完成之后,打开命令 ...

  6. 深入了解MVC(转)

    MVC无人不知,可很多程序员对MVC的概念的理解似乎有误,换言之他们一直在错用MVC,尽管即使如此软件也能被写出来,然而软件内部代码的组织方式却是不科学的,这会影响到软件的可维护性.可移植性,代码的可 ...

  7. jnhs-java实体类的有参构造器 无参构造器Could not instantiate bean class 实体类No default constructor found

    new一个对象的时候要用到构造函数, 例如Hello hello = new Hello();这时调用的是Hello的无参数构造方法; Hello hello = new Hello("hi ...

  8. expect.js

    前言 1> 借鉴里面的应用思想,使用断言提高代码的健壮性及维护性 2> 实现方式--不采用直接嵌入expect的方式,统一进行重写(提取常用断言方法,重新构造API) 官网介绍 https ...

  9. Vue2.0史上最全入坑教程(上)—— 搭建Vue脚手架(vue-cli)

    ps: 想了解更多vue相关知识请点击VUE学习目录汇总 Vue作为前端三大框架之一截至到目前在github上以收获44,873颗星,足以说明其以悄然成为主流.16年10月Vue发布了2.x版本,经过 ...

  10. ubuntu设置终端命令历史记录

    ----------------------------------------------- HISTTIMEFORMAT='%F %T ' # 使用HISTTIMEFORMAT在历史中显示TIME ...