自言自语:
工作两年多了,编程水平还停留在菜鸟阶段,可悲啊!:(。所以业余时间研究研究当下比较不错的开源项目,一来提升自己的编程水平。二来写点文档心得什么的,算是提升书写能力吧。
本人水平有限。不当之处,敬请见谅。
英文版: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"后缀。
欢迎评论交流!