码迷,mamicode.com
首页 > 其他好文 > 详细

[libevent]Libevent介绍与编译

时间:2015-04-07 23:29:39      阅读:251      评论:0      收藏:0      [点我收藏+]

标签:

libevent介绍

libevent是一个轻量级的,开源高性能的,基于事件触发的网络库,适用于windowslinuxbsd等多种平台,内部使用selectepollkqueue等系统调用管理事件机制。 

编译库代码,编译脚本会判断OS支持哪种类型的事件机制(selectepollkqueue),然后条件编译相应代码,供上层使用的接口仍然是保持统一的。  

有许多开源项目使用libevent,例如memcached。使用libevent,使得memcached可以适应多种操作系统。Libevent对底层异步函数提供了较薄封装,库本身没有消耗过多性能;另外,使用堆排序管理定时器队列,提供了较高的性能。总体来说,libevent有下面一些特点和优势: 

  • 统一数据源, 统一I/O事件,信号和定时器这三种事件
  • 可移植,跨平台支持多种I/O多路复用技术, epollpolldev/pollselect kqueue 
  • 对并发编程支持,避免竞态条件;
  • 高性能,由事件驱动;
  • 轻量级,专注于网络

libevent有下面几大部分组成:

  • 事件管理包括各种IOsocket)、定时器、信号等事件,也是libevent应用最广的模块;
  • 缓存管理是指evbuffer功能;
  • DNSlibevent提供的一个异步DNS查询功能;
  • HTTPlibevent的一个轻量级http实现,包括服务器和客户端 

libevent的结构

  • evutil 用于抽象不同的平台的网络(基础的)实现
  • eventevent_base 为 Libevent 的核心,为不同的平台下基于事件的非阻塞 I/O 提供了一套抽象的接口
  • bufferevent 对 Libevent 的基于事件的核心的封装。应用程序的读写请求是基于缓冲区的
  • evbuffer 为 bufferevent 实现的缓冲区
  • evhttp 一个简单的 HTTP client/server 的实现
  • evdns 一个简单的 DNS client/server 的实现
  • evrpc 一个简单的 RPC 实现

源代码组织结构

libevent的源代码虽然都在一层文件夹下面,但是其代码分类还是相当清晰的,主要可分为头文件内部使用的头文件辅助功能函数日志libevent框架对系统I/O多路复用机制的封装信号管理定时事件管理缓冲区管理基本数据结构基于libevent的两个实用库等几个部分,有些部分可能就是一个源文件。 

  • 头文件----主要就是event.h:事件宏定义、接口函数声明,主要结构体event的声明;
  • 内部头----xxx-internal.h:内部数据结构和函数,对外不可见,以达到信息隐藏的目的;
  • libevent框架----event.cevent整体框架的代码实现;
  • 对系统I/O多路复用机制的封装----epoll.c:对epoll的封装;select.c:对select的封装;devpoll.c:对dev/poll的封装;kqueue.c:对kqueue的封装;
  • 定时事件管理----min-heap.h:其实就是一个以时间作为key的小根堆结构;
  • 信号管理----signal.c:对信号事件的处理;
  • 辅助功能函数---evutil.h evutil.c:一些辅助功能函数,包括创建socket pair和一些时间操作函数:加、减和比较等。
  • 日志----log.hlog.clog日志函数
  • 缓冲区管理----evbuffer.cbuffr.clibevent对缓冲区的封装;
  • 基本数据结构----compat/sys下的一个源文件:queue.hlibevent基本数据结构的实现,包括链表,双向链表,队列等 
  • 实用网络库----httpevdns:是基于libevent实现的http服务器和异步dns查询库; 

编译libevent

1.在此下载,最新的libevent压缩包libevent-2.0.22-stable.tar.gz 。源文件有个问题,evutil.c源码修改这部分。不然使用会失败
#ifdef WIN32
#include <winsock2.h>
#include <ws2tcpip.h>
#pragma comment(lib,"ws2_32.lib") 
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#undef WIN32_LEAN_AND_MEAN
#include <io.h>
#include <tchar.h>
#endif
2.打开VS2012开发工具命令行,cd libevent目录;键入nmake /f Makefile.nmake完成编译,生成以下3个库文件
  • libevent_core.lib:所有核心事件功能和buffer功能,包括event_base,evbuffer, bufferevent, utility
  • libevent_extra.lib:提供某些特定协议的功能,包括HTTP, DNS, RPC
  • libevent.lib:此库由于历史原因而存在,不要使用它,以后可能消失。

 

[libevent]Libevent介绍与编译

标签:

原文地址:http://blog.csdn.net/shimazhuge/article/details/44915745

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!