您的位置:首页 > 其它

libevent 参考手册

2015-01-26 20:57 197 查看
4000

自言自语:

工作两年多了,编程水平还停留在菜鸟阶段,可悲啊!:(。所以业余时间研究研究当下比较不错的开源项目,一来提升自己的编程水平。二来写点文档心得什么的,算是提升书写能力吧。

本人水平有限。不当之处,敬请见谅。


英文版:http://www.wangafu.net/~nickm/libevent-book/Ref0_meta.html

libevent 简介(来自度娘):

libevent是一个事件触发的网络库,适用于windows、linux、bsd等多种平台,内部使用select、epoll、kqueue等系统调用管理事件机制。著名分布式缓存软件memcached也是libevent based,而且libevent在使用上可以做到跨平台,而且根据libevent官方网站上公布的数据统计,似乎也有着非凡的性能。


libevent 是一个用于编写快速、可移植、非阻塞IO程序的网络库。设计目标如下:

可移植性:

使用libevent 编写的程序可移植到libevent 支持的所有平台上。即使在某个平台上没有良好的实现非阻塞IO的方式,libevent 也支持so-so ways,所以可以让你的程序运行在比较严苛的环境下。

速度:

libevent 尽量采用每个平台下可用的最快的非阻塞IO方式来实现

伸缩性:

libevent在程序同时处理上千个socket时,仍能工作良好。

方便性:

使用libevent 编写程序最自然的方式也是稳定、可移植的。


libevent 的组成部分:

evutil

将不同平台上的网络实现部分抽象出来的通用部分。

event and event_base

libevent 的核心。对依赖于平台、基于事件的非阻塞IO后端的封装。让你知道socket何时准备好读写,并提供一些基本的超时和OS信号检测功能。

bufferevent

对libevent 核心的进一步封装,提供更加方便的功能。为你的程序提供已经缓存的读写,而不是当socket可以读写时再通知你。它们让你知道何时真正的产生了IO。

evbuffer

为bufferevent 提供基本的buffer 功能,并且提供高效/方便的访问接口。

evhttp

一个简单的HTTP client/server 实现。

evdns

  一个简单的DNS client/server 实现。

evrpc 

一个简单的RPC实现。


构建libevent 时生成的库:

构建libevent 时,默认会安装以下的库:

libevent_core

包含所有的核心事件和buffer 功能。此库包含event_base,evbuffer,bufferevent,其他一些实用函数

libevent_extra

包含基于特定协议的功能,例如HTTP,DNS,RPC。

libevent

遗留的库。包含libevent 和libevent_extra的功能,最好不要使用这个库,在将来的版本中可能会去除此库。


下面的库在特定的平台上才会安装:

libevent_pthreads

此库添加基于posix thread 的线程和锁支持。由于其和libevent_core 库分离,所以你可以自由决定是否使用libevent提供的多线程支持。

libevent_openssl

为使用bufferevent 和OpenSSL 的加密通信提供支持。是否使用libevent_openssl取决于你对加密通信的需求。


头文件:

当前所有的libevent 头文件安装在event2 目录下。所有的头文件分为三类:

API headers

定义了libevent提供的接口。这些头文件的命名不包含特定的后缀。

Compatibility headers

兼容性头文件为定义了已经“移除"的功能。除非你正在移植使用旧版本的libevent构建的程序,否则不应该使用

这些头文件。

Structure headers

定义了比较容易变更布局的数据结构。其中一些曝光结构便于快速访问某个结构内部;另一些由于历史原因而曝光。直接使用这些头文件中的数据结构容易打破和其他版本的libevent 的二进制兼容性,可能产生难于调试的BUG。这些头文件的名称都带有"_struct.h"后缀。


欢迎评论交流!


















阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: