Libevent引言
Toc
  1. 总览
    1. Libevent划分成下面几个部分
  2. 库文件Libraries
  3. 头文件Headers
  4. 如果你使用的是旧版本
  5. 一些旧版本的说明

原文:R0: Preliminaries

总览

Libevent适用于开发可移植高速非阻塞IO程序,它的设计理念:

  1. 移植
    一个使用Libevent的程序能跨平台运行。即使没有更好的方式来实现非阻塞IO,Libevent也能凑合用,让你的程序在资源有限的环境下运行。

  2. 速度
    Libevent尝试在不同平台上选择效率最好的方式来实现非阻塞IO,且不增加额外的开销。(比如,在linux下,libevent封装了epoll,但相对epoll,libevnet不要求更多开销)

  3. 伸缩性
    Libevent在设计上就是为了能支撑千万级别的sock IO。

  4. 使用方便
    使用起来很稳定、轻巧。

Libevent划分成下面几个部分

  1. evutil
    把不同平台的网络实现智能地抽象和封装起来。

  2. event和event_base
    Libevent的核心。 他们提供的接口,封装了不同平台上基于事情驱动、非阻塞IO的实现,当sock可读写、事件超时,或者有信号到来的时候通知你的程序。

  3. bufferevent
    这部分的函数对Libevent的事件驱动核心做了一个更为方便的封装,提供带buffer的sock读和写。
    bufferevent也对不同平台的高速非阻塞IO的实现都做了封装,包括Windows IOCP API,这样可以在不同平台上使用该平台提供的高速非阻塞IO实现。

  4. evbuffer
    这个模块实现bufferevent的buffer,提供各种更高效的或更方便的读写buffer函数。

  5. evhttp
    一个简单的HTTP客户端/服务端实现。

  6. evdns
    一个简单的DNS客户端/服务端实现。

  7. evrpc
    一个简单的RPC实现。


库文件Libraries

当安装Libevent,默认安装下面的库文件:

  1. libevent_core
    包含核心的event(事件)和buffer(缓冲)功能,包含所有的event_base, evbuffer, buffereven和各种辅助函数。

  2. libevent_extra
    定义了一些平台相关的函数,你也许不会用到,包含HTTP, DNS, RPc。

  3. libevent
    因历史原因才存在的库文件,包含了上面2个库文件的内容,但你不应该再使用这个库文件了,在未来的版本中它或许不再使用。

下面的库文件只在一些平台上才安装:

  1. libevent_pthreads
    基于pthreads(linux平台)这个线程库,封装了线程和锁。这个库从libevent_core分离出来,这样的话,如果你不是在linux上使用线程,在链接时你可以不使用这个库文件。

  2. libevent_openssl
    使用bufferevents和开源的OpenSSL,提供加密环境。如果你不使用OpenSSL, 你也不用链接这个库文件。


头文件Headers

当前Libevent提供的头文件都再<event>这个目录下,可以归类成三大类:

  1. API headers
    定义程序可以使用的接口,在命名上,这里的接口没有带特殊的后缀。

  2. Compatibility headers
    为了兼容才提供的头文件,你不应该使用这里的定义,除非你再移植一个使用了旧版本Libevent的程序。

  3. Structure headers
    定义各种可能会改变的数据结构。为了方便你查看,一些数据结构的定义公开出来,但一些则是因为历史原因才公开出来。假若在你的程序代码里直接使用这里定义的数据结构,那你的程序将不能跟其他Libevent兼容,且难以debug。 这些头文件有一个后缀_struct.h.

<event>目录之外也有其他旧版本的头文件。


如果你使用的是旧版本

略。(主要是讲旧版本的头文件被替换成新的文件后,新文件名是什么,若有兴趣请查看原文)


一些旧版本的说明

简单说来,请使用2.0或以后的版本。



– EOF –

Categories: in_lib
Tags: libevent