libevent库简单使用

一、libevent库简介

Libevent是一个用于开发可扩展性网络服务器的基于事件驱动(event-driven)模型的网络库。Libevent有几个显著的亮点: 
(1)事件驱动(event-driven),高性能;
(2)轻量级,专注于网络,不如 ACE 那么臃肿庞大; 
(3)源代码相当精炼、易读; 
(4)跨平台,支持 Windows、Linux、*BSD和 Mac Os; 
(5)支持多种 I/O多路复用技术, epoll、poll、dev/poll、select 和kqueue 等; 
(6)支持 I/O,定时器和信号等事件; 
(7)注册事件优先级; 
 Libevent 已经被广泛的应用,作为底层的网络库;比如 memcached、 Vomi t、 Nylon、 Netchat等等。

以上来自百度百科:

二、libevent简单使用

libevent有以下几个主要函数:

(1)初始化libevent库

1 struct event_base * event_init(void) /*初始化libevent库, 返回一个struct event_base 指针*/
2
3 struct event_base * event_base_new(void) /*同样是初始化libevent库,官方后出的用来替代evnet_init()的*/
4 //区别就是前者是线程安全的、而后者是非线程安全的,后者在其官方说明中已经被标志为过时的函数、且建议用前者代替

(2)初始化事件ev,设置回调函数和关注的事件

1 void event_set(struct event *ev, int fd, short event, void (*cb)(int, short, void *), void *arg) /*初始化事件,并且设置回调函数和关注的事件*/
2 /*
3 ev:    执行要初始化的 event 对象;
4 fd:    该 event 绑定的“句柄”,对于信号事件,它就是关注的信号;
5 event:在该 fd 上关注的事件类型,它可以是 EV_READ, EV_WRITE, EV_SIGNAL;
6 cb:    这是一个函数指针,当 fd 上的事件 event 发生时,调用该函数执行处理,它有三个参数,
7     调用时由 event_base 负责传入,按顺序,实际上就是 event_set 时的 fd, event 和 arg;
8 arg:    传递给 cb 函数指针的参数*/
9     

(3)设置event所属的event_base

1 event_base_set(base, &ev);
2
3 //指明 event 要注册到哪个 event_base 实例上

(4)event_add添加事件

1 event_add(&ev, timeout);
2 //添加事件并设置超时时间

(5)event_base_dispatch循环等待就绪事件并处理

1 event_base_dispatch(base);
时间: 2024-10-20 09:12:49

libevent库简单使用的相关文章

R1:创建Libevent库

原文链接:http://www.wangafu.net/~nickm/libevent-book/Ref1_libsetup.html Setting up the Libevent library Libevent有一些被整个进程共享的全局设置.这些设置会影响到整个库.在使用Libevent库的其余部分之前,你应该先对这些设置做些修改.否则的话Libevent可能会以一种前后矛盾的状态终止( If you don’t, Libevent could wind up in an inconsis

Libevent库学习笔记

Libevent是一个事件触发的网络库,适用于windows.linux.bsd等多种平台,Libevent在底层select.pool.kqueue和epoll等机制基础上,封装出一致的事件接口.可以注册可读.可写.超时等事件,指定回调函数:当事件发生后,Libevent调用回调函数,可以在回调函数里实现自定义功能.编译库代码,编译脚本会判断OS支持哪种类型的事件机制(select.epoll或kqueue),然后条件编译相应代码,供上层使用的接口仍然是保持统一的. 著名分布式缓存软件memc

C10K问题和Libevent库介绍

http://blog.chinaunix.net/uid-20761674-id-75056.html 一.C10K的问题 C10K的问题在上个世纪90年代就被提出来了.大概的意思是当用户数超过1万时,很多设计不良好的网络服务程序性能都将急剧下降.甚至瘫痪.并且,这个问题并不能通过升级硬件设备解决,是操作系统固有的问题,也就是说,如果你的服务器最高能支撑1000个并发,尽管你升级了计算能力高一倍的 cpu,内存再翻一番,硬盘转速在快一倍,也无法支撑2000个并发. 经典的网络编程模型有4个:

MAC OS下编译apple跨平台的libevent库 (可延申到其它第三库)

apple下的跨平台是指不同设备上的苹果系统以及同一系统在不同cpu体系的不同版本. 前面一篇介绍如何用ndk编译android跨平台的第三库,那样的方法却不能应用在apple上. 网上可以找到这么一个脚本,其主要过程和功能如下图: 脚本主要依靠了xcrun -sdk命令来搜索出平台关联的编译程序和SDK目录位置.不像ndk的目录结构,苹果的目录结构不清晰有些又不统一,xcrun就是这个咨客,问它就是了. 只要将脚本中相应的容器修改就可以应用到其它第三库的编译中去. 接下来就编译过程中的怪问题.

DB2建库简单例子

--重启数据库 FORCE APPLICATION ALL DB2STOP DB2START --创建数据库 CREATE DATABASE mysdedb USING CODESET UTF-8 TERRITORY US COLLATE USING SYSTEM USER TABLESPACE MANAGED BY DATABASE USING (FILE 'd:\DB2\data\mysdedb\sdetbsp' 51200) CONNECT TO mysdedb --创建缓冲池(使用32k

Libevent源码分析—从使用Libevent库开始

练习libevent库的使用,主要是几个API的调用顺序.根据event.h的开头注释部分可知,要使用libevent库,主要的几个API及调用顺序为: event_base()初始化event_base event_set()初始化event event_base_set()将event绑定到指定的event_base上 event_add()将event添加到事件链表上,注册事件 event_base_dispatch()循环.检测.分发事件 写个测试程序,每隔1s打印一条信息 #inclu

Python常用的库简单介绍一下

Python常用的库简单介绍一下fuzzywuzzy ,字符串模糊匹配. esmre ,正则表达式的加速器. colorama 主要用来给文本添加各种颜色,并且非常简单易用. Prettytable 主要用于在终端或浏览器端构建格式化的输出. difflib ,[Python]标准库,计算文本差异 . Levenshtein ,快速计算字符串相似度. Chardet 字符编码探测器,可以自动检测文本.网页.xml的编码. shortuuid ,一组简洁URL/UUID函数库. ftfy ,Uni

(十一)libevent库的使用

参考: http://libevent.org Libevent使用例子,从简单到复杂 1. libevent 使用第三方库我一般都偏爱最新的版本,libevent也是如此,所以我以 libevent-2.1.8-stable.tar.gz为例,在官网上可以下载. 编译.使用 ./configure make 头文件在include文件夹下,编译生成的动态库在.libs文件夹下. 使用时,需要包含头文件和连接libevent.so动态库. 2. 示例 2.1 TcpServer.h #ifnde

cocos2dx加libevent库

路径: $path = cocos2dx/platform/third_party 1.win32 将生成的libevent_core.lib,libevent_extras.lib放到$path/win32/libraries中 头文件event2和event-config.h 放到$path/win32/libevent中 VS中设置include path和 add lib 2.ios 生成IOS平台的库文件(libevent_core.a,libevent_extra.a,libeven