http://blog.csdn.net/happyanger6/article/details/7272324

1. 介绍

libevent是一个用来开发可扩展的网络服务器的事件通知函数库。当一个文件描述符上的特定事件发生或是一个超时时间到达后,libevent API提供一种执行回调函数的机制。而且,libevent还支持基于信号或定期超时的回调功能。

libevent旨在替换在原有事件驱动网络服务器事件循环而设计的。应用程序仅仅需要调用event_dispatch(),然后动态地添加或是移除事件就可以了,而不需要改变原有的事件循环。

目前,libevent支持/dev/poll,kqueue(2),select(2),poll(2)和epoll(4)等高并发网络编程模型。而它 对实时信号的支持正处于实验性阶段。内部的事件处理机制是完全独立于暴露出来的API的,并且新功能的加入并不需要重新设计应用程序,而是仅仅需要做一个 简单的libevent更新即可。因此,lievent允许可移植性的应用程序开发,并且能够提供适合特定操作系统的最具可扩展性的事件通知机制。 libevent同时也可用于多线程编程环境,更多说明请看Steven Grimm的说明。libevent可以在Linux,*BSD,Mac OS X,Solaris和Windows系统上编译。

2. 标准用法

每一个使用libevent的程序,都需要包含<event.h>头文件,并且需要传递-levent标志给连接器linker。在使用任何 库函数之前,需要先调用event_init()或者event_base_new()函数制执行一次libevent库的初始化。

3. 事件通知

对于每一个你想监视的文件描述符,你必须声明一个事件结构并且调用event_set()去初始化结构中的成员。为了激活通知,你需要通过调用 event_add()将该结构添加到监视事件列表。只要是该事件存活,那么就需要保持该已allocated的事件结构,因此该事件结构需要在堆 (heap)上申请。最后,需要调用event_dispatch()函数循环和调度事件。

4. I/O缓冲区

libevent提供了一个定期回调事件顶层的抽象。该抽象被称为缓冲事件(buffered event)。缓冲事件提供自动地填充和流掉(drained)的输入和输出缓冲区。缓冲时间的用户不再需要直接操作I/O,取而待之的是仅仅从输入缓冲 区读,向输出缓冲区写就可以了。

一旦通过bufferevent_new()进行了初始化,bufferevent结构就可以通过bufferevent_enable()和 bufferevent_disable()重复地使用了。作为替代,对一个套接口的读写需要通过调用bufferevent_read()和 bufferevent_write()函数来完成。

当由于读事件而激活bufferevent时,那么后续将会自动回调读函数从该文件描述符读取数据。写函数将会被回调,无论何时这个输出缓冲区空间被耗尽到低于写的下水位(low watemark),通常该值默认为0。

5. 定时器

libevent通过创建一个定时器来参与到一个经过一定超时时间后的回调事件中。evtimer_set()函数将准备(分配)一个事件结构被用于作为 一个定时器。为了激活定时器,需要调用evtimer_add()函数。相反,需要调用evtimer_del()函数。

6. 超时

除了简单的定时器,libevent可以为文件描述符指定一个超时事件,用于触发经过一段时间后而没有被激活的文件描述符执行相应的操作。 timeout_set()函数可以为一个超时时间初始化一个事件结构。一旦被初始化成功,那么这个事件必须通过timeout_add()函数激活。为 了取消一个超时事件,可以调用timeout_del()函数。

7. 异步DNS解析

libevent提供了一个异步DNS解析器,可用于代替标准的DNS解析器。这些函数可以通过在程序中包含<evdns.h>头文件而将其 导入。在使用任何解析器函数之前,你必须调用evdns_init()函数初始化函数库。为转化一个域名到IP地址,可以调用 evdns_resolve_ipv4()函数。为了执行一个反响查询,你可以调用evdns_resolve_reverse()函数。所有的这些函 数,在查找时都会使用回调的方式而避免阻塞的发生。

8. 事件驱动的HTTP服务器

libevent提供了一个简单的可以嵌入到你的程序中的并能处理HTTP请求的事件驱动HTTP服务器。

为了使用这种能力,你应该在你的程序中包含<evhttp.h>头文件。你可以通过调用evhttp_new()函数来创建一个服务器。通过 evhttp_bind_socket()函数添加用于监听的地址和端口。然后,你可以注册一个或多个对到来请求的处理句柄。对于每一个URI可以通过 evhttp_set_cb()函数指定一个回调。通常,一个回调函数也可以通过evhttp_set_gencb()函数完成注册;如果没有其他的回调 已经被注册得到该URI,那么这个回调将会与其关联。

9. RPC服务器和客户端框架

libevent提供了一个创建RPC服务器和客户端的编程框架。它将托管所有的编组和解组的数据结构。

libevent功能使用简介的更多相关文章

  1. Libevent教程001: 简介与配置

    本文内容大致翻译自 libevent-book, 但不是照本翻译. 成文时, libevent最新的稳定版为 2.1.8 stable. 即本文如无特殊说明, 所有描述均以 2.1.8 stable ...

  2. 优秀个人免费私有云OwnCloud 8.0终于发布 - 亮眼新功能初探简介

    OwnCloud是一个基于Linux的私有云开源项目,用户可以免费使用它来搭建自己的私有云来进行文件和多媒体等的分享. 本人有幸在大概一年多前因为项目需要而接触和使用到OwnCloud,但不幸的是当时 ...

  3. htop 详细功能使用简介

    一.htop 简介 This is htop, an interactive process viewer for Linux. It is a text-mode application (for ...

  4. WindowsPhone8拍照功能实现简介

    WindowsPhone作为一款智能手机操作系统,支持APP中拍照是必不可少的,目前在WP8上的拍照主要有以下三种途径: 1.使用CameraCaptureTask: 2.使用PhotoCamera类 ...

  5. 异常上报功能Bugly简介

    目的:为了能够快速定位到线上版本bug位置,经过比较之后,决定使用腾讯家的Bugly. 1.注册产品 官方文档使用指南 1.1 登录 - 使用 QQ 登录Bugly官网 没有账号就注册,要实名就实名, ...

  6. svn常用功能使用简介

    1.文档库地址: https://xxx.xxx.xxx.xxx/svn/ 2.svn添加文件 2.1 在本地电脑上任何空白地方,右键-->打开“浏览版本库(Repo-browser)”,如图: ...

  7. VMware vSphere 组件和功能

    https://pubs.vmware.com/vsphere-50/index.jsp?topic=%2Fcom.vmware.vsphere.introduction.doc_50%2FGUID- ...

  8. 升级IOS8游戏上传自定义头像功能失效的问题

    为了支持arm64,之前已经折腾了很久,昨晚打包准备提交苹果审核时,测试那边的同事反馈说游戏上传自定义头像功能不可用了. 游戏上传自定义功能的简介:卡牌游戏最初是<比武招亲>中有一个充VI ...

  9. IBM ILOG JViews Charts 产品及功能介绍

    摘抄连接:http://www.ibm.com/developerworks/cn/websphere/library/techarticles/1004_lidb_ilogjchart/ IBM I ...

随机推荐

  1. 4.FPGA芯片管脚解释

    用户I/O:不用解释了.   配置管脚: MSEL[1:0] 用于选择配置模式,比如AS.PS等. DATA0 FPGA串行数据输入,连接到配置器件的串行数据输出管脚. DCLK FPGA串行时钟输出 ...

  2. python实现树莓派生成并识别二维码

    python实现树莓派生成并识别二维码 参考来源:http://blog.csdn.net/Burgess_Liu/article/details/40397803 设备及环境 树莓派2代 官方系统R ...

  3. Java Day 13

    线程的状态 被创建 运行 冻结 消亡  被创建--start()--> 运行 运行----run()----> 消亡         stop() 运行---sleep(time)---& ...

  4. Js作用域与作用域链详解[转]

     一直对Js的作用域有点迷糊,今天偶然读到JavaScript权威指南,立马被吸引住了,写的真不错.我看的是第六版本,相当的厚,大概1000多页,Js博大精深,要熟悉精通需要大毅力大功夫. 一:函数作 ...

  5. Notes of the scrum meeting(11/4)

    meeting time:20:00~20:30p.m.,November 4th,2013 meeting place:20号公寓楼前 attendees: 顾育豪                  ...

  6. 典型用户 persona

    persona 典型用户 1.姓名:王涛 2.年龄:22 3.收入:基本无收入 4.代表用户在市场上的比例和重要性:王涛为铁道学生.本软件的用户主要是学生和老师,尤其是广大的铁大学子,所以此典型用户的 ...

  7. snmp安装配置

    只说一下在ubuntu下如何进行基本的配置. ubuntu Server 12.04 apt-get install snmp snmpd 安装完成之后还要安装snmp-mibs-downloader ...

  8. Linux 硬盘分区、分区、删除分区、格式化、挂载、卸载

    Linux 虽然一直都有在玩,但是对硬盘操作确实不是很熟悉今天有空,就整理了下. 1,创建分区 先查看下是否有磁盘没有分区 fdisk -l 其中第一个框和第二个框,是已经分好区的磁盘,第三个硬盘没有 ...

  9. Jquery.ajax(……)

    ajax 详细解释:http://www.cnblogs.com/mybest/archive/2011/12/13/2285730.html: 问题描述:页面发送ajax请求,服务器端返回代码总是进 ...

  10. AutoMap1.0发布

    去年就已经透漏了AutoMap的雏形,后面一段时间一直没有充裕的时间来完成,只能零星的进行完善.现在产品还有很多不足,基本架构已经完成,就先释放一个1.0版,希望大家多多支持. 一.服务端 服务端在I ...