libevent 库简介
libevent 是一款事件驱动的网络开发包,由于采用c语言开发 ,体积小,跨平台,速度极快,大量开源项目使用了libevent比如谷歌浏览器,和分布式告诉缓存系统memcached,libevnet支持kqueue,select,poll,epoll,iocp(非阻塞的工作模式),事件内部机制完全独立于公开的额事件api,libevnet 支持跨平台,可在linux,windows 等平台上编译,
优点:精简,跨平台,线程安全,专注于网络通信
下载--解压--安装
源码包安装:REANME
./config 检查安装环境 生成makefile
make 编译,生成.o可执行文件
sudo make install 将必要的资源拷贝到系统指定的目录
进入sample目录,运行demo验证 库安装使用的情况
编译使用库的.c时,需要加-levent选项
库名libevent.so /usr/lib
特点:基于“事件”异步通信模型--回调
libevnet框架
创建 event_base(乐高的底座)
创建事件 event
将事件添加到 base上
循环监听事件满足
释放event_base
(1)创建 event_base(底座)
struct event _base *event_base_new(void);//创建函数;
struct event_base*base=evnet_base_new();
(2)创建事件
常规事件 event------>evnet_new();
bufferevent----------->bufferevnet_socket_new();
(3)将事件添加到base上
int event_add (struct *ev,const struct timeval *tv);
ev:event_new()函数返回的事件
TV:为null时,不会超时,意思是一直等到事件被触发,回调函数会被调用
为非0,等待期间检查事件没有被触发,时间到回调函数依然会被调用
(4)循环监听事件满足
int event_base_dispatch(struct event_base *base);
event_base_dispatch(base);成功返回0,失败返回-1;
只有event_new 中指定了EV_PERSIST才持续触发,否则只触发一次就跳出循环
通常这样:EV_WRITE|EV_PERSIST , EV_READ|EV_PERSIST
其他循环;
int event_base_loopexit(struct evnet_base *base,const struct timecal*tv);
在指定时间后停止循环
int event_base_loopbreak(struct evnet_base *base);立即停止循环
(5)释放event_base
void event_base_free(struct event_base*base);//释放函数;
event _base_free(base);
特征:基于事件的异步通信模型,所见皆事件,等某个条件到达时去执行某个函数(回调机制)-----回调
相关函数了解:
查看支持哪些多路io
const char ** evnet_get_supported_methods(void);
查看当前用的多路io
const char *event_base_get_method(const struct event_base *base);
查看fork()后子进程使用的event_base
int event_reinit(struct event_base *base);
成功0 失败-1;