zoukankan      html  css  js  c++  java
  • [翻译]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

  • 相关阅读:
    如何选择Html.RenderPartial和Html.RenderAction
    [转]使用 HTML5 WebSocket 构建实时 Web 应用
    基于.NET平台常用的框架整理
    0303
    XMLHTTP
    0120如何合并两个使用 System.Xml 使用 Visual C#.NET 的 XML 文档中的数据
    后台动态创建datatable0115
    笔记1126ASP.NET面试题(转)
    笔记1015
    数组与ARRAYLIST的关系与区别(转)
  • 原文地址:https://www.cnblogs.com/shines77/p/2958599.html
Copyright © 2011-2022 走看看