[翻译]Libevent 参考手册:前言

Libevent 参考手册:前言

从一万英尺外看 Libevent


Libevent 是一个用于编写高速的、可移植的非阻塞IO的应用库,其设计目标是:

可移植性

使用 Libevent 编写的程序应该可以在 Libevent 支持的所有平台上工作。即使没有一个真正好的方式来实现非阻塞IO,Libevent 也应该支持还过得去的方式,让程序可以在受限制的环境中运行。

速度

Libevent 在每个平台上尝试使用最高速的非阻塞IO实现方式,并且没有因为这做而引入太多的额外开销。

可扩展性

Libevent 被设计为即使程序需要上万个活动套接字的时候也可以良好工作。

方便性

无论何时,最自然的使用 Libevent 编写程序的方式应该是稳定的、可移植的。

Libevent 被划分为下列组件:

evutil

用于抽象不同平台网络实现差异的通用功能。

event and event_base

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

bufferevent

这些函数为基于事件的 Libevent 核心提供了更方便的封装。它们让你的程序可以请求缓冲的读取和写入,而不是当套接字准备好读或写的时候通知你,让你知道何时IO已经真正发生。

bufferevent 接口有多个后端,使它可以充分利用系统能够提供的更快的方式去实现非阻塞IO,如 Windows 中的 IOCP。
evbuffer

这个模块实现了 bufferevent 相关的缓冲区,并且提供了一些函数方便有效的进行 and/or 访问。

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

这个库添加了基于 pthread 可移植线程库的线程和锁实现。它独立于 libevent_core,这样程序使用 Libevent 时就不需要链接到 pthread,除非是你真正的以多线程方式使用 Libevent。

libevent_openssl

这个库为使用 bufferevent 和 OpenSSL 进行加密的通信提供支持。它独立于 libevent_core,这样程序使用 Libevent 时就不需要链接到 OpenSSL,除非你是真正的要进行加密通信。

头文件

所有当前版本的 Libevent 公用头文件都安装在 event2 目录中,头文件分为三大类:

API headers (API头文件)

这些API头文件定义了当前的 Libevent 公用接口。这类头文件没有特定后缀。

Compatibility headers (兼容性头文件)

为已废弃的函数提供兼容的头文件定义。不应该使用这类头文件,除非是在移植旧版本的 Libevent 程序的时候。

Structure headers (结构体头文件)

这类头文件以相对不稳定的布局定义各种结构体。这些结构体中的一些是为了提供快速访问结构体组件而暴露,一些是因为历史原因而暴露。直接依赖这类头文件中的任何结构体都会破坏程序对其他版本 Libevent 的二进制兼容性,有时候是以非常难以调试的方式出现。这类头文件会以后缀“_struct.h”结尾。

(还存在一些不在 event2 目录中的较老版本 Libevent 的头文件,请参考下节:“如果你不得不使用一个老版本的 Libevent”)

如果你不得不使用一个老版本的 Libevent

Libevent 2.0以更合理的、不易出错的方式修正了API。如果可能,编写新程序时应该使用 Libevent 2.0。但是有时候可能需要同时支持较老的 API,要么是在升级已存在的应用程序时,或者支持因为某些原因不能安装2.0或者更新版本 Libevent 的环境时。

较老版本的 Libevent 头文件较少,也不安装在 event2 目录中:

旧的头文件……替换为当前版本的头文件

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 才是线程安全的。

下面的一些章节还将讨论在特定代码库区域可能遇到的已经废弃的API。

关于版本状态的注意事项

1.4.7 及以前版本应该被认为是完全废弃的。1.3e 之前的版本应该被认为是无可救药的、且充满 bug 的。

(此外,不要向 Libevent 维护者发送任何关于 1.4.x 或者更早版本的新特征,这些版本被认为是稳定的发布版本。如果在 1.3x 或者更早版本中发现 bug,在报告之前请确定在最新的稳定发布版本中问题仍然存在:后续发布可能已经解决了问题。)


Last updated 2009-11-20 19:55:41 EDT

posted @ 2013-03-13 23:53  shines77  阅读(632)  评论(0编辑  收藏  举报