libevent学习二

Libevent库是用来开发高效,可移植的非阻塞IO。它的设计目标

1. 可移植性

2. 高效性:Libevent试图使用每个平台上的最高效的非阻塞IO的实现

3. 可扩展性:Libevent被设计成,即使程序需要去处理上万条活跃的socket也能运行良好。

4. 方便性:不管在什么情况下,用最正常的方式去用libevent写一个程序,都可能稳定,可移植。

Libevent库包含以下几个模块

1. evutil:通用的功能,已经抽象出不同平台之间的差异。

2. event和event_base:相当于libevent的心脏。为各个平台的基于事件的非阻塞IO提供了一个统一的接口。当socket准备好读或写,或发生超时,或当有系统信号抵达,它都会通知你。

3. bufferevent:这些方法为libevent的event-based核心提供了更方便的包装。它让你主动去请求已缓冲的读和写,而不是当IO发生时,才去通知你这些已经准备好了。

bufferevent接口也可以有多个后端,所以它可以充分发挥系统的优势,提供更高效的非阻塞IO,就像Windows的IOCP接口。

4. evbuffer:这个模块实现的是bufferevent下面的buffer,提供了可方便,高效访问的方法。

5. evhttp:简单的HTTP客户端、服务器的实现。

6. evdns:简单的DNS客户端、服务器的实现。

7. evrpc:简单的RPC实现。

当Libevent被构建时,默认的它需要安装以下几个类库

1. libevent_core:所有的核心event和buffer相关方法。包括所有的event_base,evbuffer,bufferevent,还有通用方法。

2. libevent_extra:定义了协议相关的方法。在你的代码里可能需要用到,包括HTTP,DNS,RPC。

3. libevent:历史遗漏,不应该使用。在将来的版本中可能会被去掉。

下面的库可能在某些平台上用到:

1. libevent_pthreads:在pthread的可移植线程库的基础上增加了线程和锁的实现。它跟libevent_core是分开的,如果你不使用多线程的方式使用libevent,你不需要去链接pthread库。

2. libevent_openssl:这个库通过封装bufferevents和OpenSSL库,提供了对加密链接的支持。它跟libevent_core也是分开的,如果你不使用加密链接,就不需要去链接OpenSSL库。

头文件

目前所有的公共头文件都在event2目录下。头文件被分为三大类:

1. API头文件:定义了Libevent的公共接口。这些头文件没有特殊后缀。

2. 兼容性头文件:包含了一些已经废弃的方法。如果不是从一个旧版本移植程序,不建议包含它。

3. 结构体头文件:定义了结构体。其中一些是用来快速访问的,还有一些是由于历史原因被暴露出来。有了这些结构体的定义,你可以方便的调试。这些头文件带有后缀"_struct.h"。

时间: 2024-08-11 06:53:09

libevent学习二的相关文章

libevent学习之二:Windows7(Win7)下编译libevent

Linux下编译参考源码中的README文件即可,这里主要记录Windows下的编译. 一.准备工作 去官网下载最新的稳定发布版本libevent-2.0.22-stable 官网地址:http://libevent.org/ 二.使用VS2012编译 1.解压libevent到C:\Users\zhang\Desktop\libevent-2.0.22-stable 2.打开“VS2012开发人员命令提示”工具,如下图所示. 3.输入指令开始编译,如下图所示. 有网友说编译之前应该在以下3个文

[Python 学习] 二、在Linux平台上使用Python

这一节,主要介绍在Linux平台上如何使用Python 1. Python安装. 现在大部分的发行版本都是自带Python的,所以可以不用安装.如果要安装的话,可以使用对应的系统安装指令. Fedora系统:先以root登入,运行 yum install python Ubuntu系统:在root组的用户, 运行 sudo apt-get install python 2. 使用的Python的脚本 Linux是一个以文件为单位的系统,那么我们使用的Python是哪一个文件呢? 这个可以通过指令

OpenCV for Python 学习 (二 事件与回调函数)

今天主要看了OpenCV中的事件以及回调函数,这么说可能不准确,主要是下面这两个函数(OpenCV中还有很多这些函数,可以在 http://docs.opencv.org/trunk/modules/highgui/doc/user_interface.html 找到,就不一一列举了),然后自己做了一个简单的绘图程序 函数如下: cv2.setMouseCallback(windowName, onMouse[, param]) cv2.createTrackbar(trackbarName,

Makefile持续学习二

Makefile概述 一.Makefile里有什么? Makefile里主要包含5个东西:显式规则.隐晦规则.变量定义.文件指示和注释 1.显式规则:显式规则说明如恶化生成一个或多的目标文件,包含要生成的文件,文件的依赖文件,生成的命令 2.隐晦规则:由make自动推动功能完成 3.变量定义:变量一般都是字符串,类似C语言中的宏定义,当Makefile被执行时,其中的变量都会被扩展到相应的引用位置上 4.文件指示: 在一个Makefile中引用另一个Makefile 根据某些情指定Makefil

redis ruby客户端学习( 二)

接上一篇redis ruby客户端学习( 二) 对于redis的五种数据类型:字符串(String), 哈希(Map), 列表(list), 集合(sets) 和 有序集合(sorted sets),上一篇介绍了字符串. 1,哈希(Map) hset.设置 key 指定的哈希集中指定字段的值.如果 key 指定的哈希集不存在,会创建一个新的哈希集并与 key 关联.如果字段在哈希集中存在,它将被重写. require "redis" r = Redis.new r.hset 'my_h

Duilib学习二 第一个程序 Hello World

Duilib学习二  第一个程序 Hello World #pragma once #include <UIlib.h> using namespace DuiLib; #ifdef _DEBUG # ifdef _UNICODE # pragma comment(lib, "DuiLib_ud.lib") # else # pragma comment(lib, "DuiLib_d.lib") # endif #else # ifdef _UNICOD

Jquery Easy UI初步学习(二)datagrid的使用

第一篇学的是做一个管理的外框,接着就是数据datagrid绑定了,这里我用asp.net mvc3来做的,主要就是熟悉属性.方法. 打开easyui的demo 就可以看到如下一段代码: 和上篇一样class="easyui-datagrid", data-options="...",这是一样的,其他我在网上查了查,并做了整理 DataGrid 属性 参数名 类型 描述 默认值 title string Datagrid面板的标题 null iconCls strin

Oracle学习(二):过滤和排序

1.知识点:可以对照下面的录屏进行阅读 SQL> --字符串大小写敏感 SQL> --查询名叫KING的员工信息 SQL> select * 2 from emp 3 where ename = 'KING'; SQL> --日期格式敏感 SQL> --查询入职日期为17-11月-81的员工 SQL> select * 2 from emp 3 where hiredate='17-11月-81'; --正确例子 SQL> ed 已写入 file afiedt.b

Jetty学习二:配置概览-怎么配置Jetty

Jetty POJO配置 Jetty的核心组件是Plain Old Java Objects(POJOs):配置Jetty的大部分工作就是在Jetty POJOs上的初始化.装配和设置域的处理,你能通过以下的方式来实现:  1)直接通过Java代码初始化和装配Jetty对象.这个在后面Embedding Jetty讲. 2)用Jetty XML配置(一个控制反转(IoC)框架)初始化和装配Jetty对象.etc/jetty.xml文件是基本的Jetty XML配置文件,但有一些其它的etc/je