一、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