Libevent使用手册(0):预备工作

Libevent概览

Libevent是面向高速可移植非阻塞IO需求的。它的设计目标是:

可移植性

使用Libevent的程序应该可以在所有Libevent支持的平台下使用。即使在特定平台下不存在真正的非阻塞IO,Libevent也应该能够以近似的方式实现,这样的话即使在特定平台下使用非阻塞IO的程序也可以运行。

速度

Libevent试图在不同的平台上采用它们各自最高效快速的非阻塞IO且不带来过多额外开销。

扩展性

Libevent一开始就是为了能完美服务成千上万的活跃socket而设计的。

便捷

只要条件允许,在编写采用Libevent的程序时应该按照稳定且可移植的方法编写。

Libevent被划分为下列部分:

evutil

屏蔽不同平台网络实现的差异,对外提供统一的函数接口。

event event_base

这是Libevent的核心。它从不同平台基于事件的非阻塞IO抽象出一个统一的API接口。它可以通知你socket是否已经准备好读写,完成基础的超时功能,以及检测OS信号。

bufferevent

在Libevent基于事件的核心基础上,这些函数可以提供更方便的封装。它们让你的应用在缓冲区中请求读写,而不是直接在socket就绪时通知你,但是会在IO发生时通知你。

bufferevent接口也有多种的后台实现方式,所以在能够更快进行非阻塞IO的平台下表现更好,比如说Windows下IOCP的API。

evbuffer

这个模块实现bufferevents下的缓冲机制,并提供有效方便的缓冲区访问方式。

evhttp

对HTTP C/S模型的简单实现。

evdns

对DNS C/S模型的简单实现。

evrpc

对RPC的简单实现。


Libevent安装时会默认安装下列库:

libevent_core

所有核心event和buffer功能。这个库包括所有event_base,evbuffer,bufferevent和utility函数。
libevent_extra
这个库包括一些你可能需要的一些要求特定协议的功能,包括HTTP,DNS和RPC。
libevent
这个库为了向下兼容而保留,包括libevent_core和libevent_extra中的内容。不推荐使用这个库,因为在后续版本中可能会被废除。

下列库只会在特定平台上安装:

libevent_pthreads
这个库在pthread库基础上为libevent添加多线程支持。它被从libevent_core中分离出来,你只在确实使用多线程的时候链接这个库。
libevent_openssl
这个库为使用bufferevent和OpenSSL库的加密通信提供支持。它被从libevent_core中分离出来,你只在确实使用加密连接时链接这个库。

头文件

所有对外的Libevent头文件都安装在event2目录下。头文件被分为三大类:

API头文件
API头文件定义了当前版本Libevent的对外接口。这些头文件不需要特殊后缀。
为了兼容性的头文件
为了兼容性的头文件包括了弃用的函数声明。你应该只在引用使用古老版本的libevent的程序时包括这些头文件。
结构体头文件
这些头文件定义了相对活跃的底层结构。一部分结构是为了你能够快捷访问而提供,也有一部分结构是因为历史原因提供。依赖任何头文件中的结构体都可能导致你的程序在不同版本Libevent下无法通用,有时候还是以很隐蔽的方式出问题。这些头文件的后缀是“_struct.h”。

(在历史版本的Libevent中也有头文件是不在event2目录下的。详情见下文。)

如果你需要使用历史版本的Libevent

Libevent 2.0出于使用更合理和降低报错的目的修订了API。如果条件允许,你应该采用Libevent 2.0的API来编写新程序。但有时候你必须采用以前的API,无论是升级现有程序还是为了支持出于某些原因无法安装新版本Libevent。

历史版本的Libevent头文件比较少,而且也没有安装在目录event2下:

曾经的头文件……现在的头文件

event.h

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

evdns.h

event2/dns*.h

evhttp.h

event2/http*.h

evrpc.h

event2/rpc*.h

evutil.h

event2/util*.h

在2.0版本之后,以前的头文件依然作为对新头文件的封装保留下来。

其它使用旧版时需要注意的事项:

  • 在1.4版本之前,只有“libevent”库,等同于现在的libevent_core和libevent_extra。

  • 在2.0版本之前,不支持锁;Libevent仅在你不会在两个线程同时使用相同的结构时保证线程安全。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值