初识libevent:libevent框架简单认识、常规事件操作(创建、添加、销毁)

Libevent 是一个用C语言编写的、轻量级的开源高性能事件通知库,主要有以下几个亮点:事件驱动( event-driven),高性能; 轻量级,专注于网络,源代码相当精炼、易读;
跨平台,支持 Windows、 Linux、 *BSD 和 Mac Os;
支持多种 I/O 多路复用技术, epoll、 poll、 dev/poll、 select 和 kqueue 等;
支持 I/O,定时器和信号等事件;注册事件优先级
来源https://baike.baidu.com/item/libevent/.

Libevent框架

1,创建event_base struct event_base *event_base_new(void); —>
struct event_base *base = event_base_new(); 变量base可以就想成“乐高底座”

2,创建事件event
2,1,创建常规事件eventevent_new()
2,2,创建带缓冲区的事件buffereventbufferevent_socket_new()

3,将事件添加到base上int event_add(struct event *ev, const struct timeval *tv);

4,循环监听事件满足int event_base_dispatch(struct event_base *base);启动循环
只有event_new中指定了EV_PERSIST才持续触发,否则值触发一次就跳出循环
通常是EV_WRITE | EV_PERSISTEV_READ|EV_PERSIST

5,释放event_basevoid event_base_free(struct event_base *base);

特性:基于“事件”的异步通信模型

异步:函数编写时期与函数调用时期是不同时间,一定要某个条件满足才会去执行代码
主要依赖回调机制

了解一下头文件

#include<event2/bufferevent.h>
#include<event2/buffer.h>
#include<event2/listener.h>
#include<event2/util.h>
#include<event2/event.h>

创建常规事件

1,event_base_new()的返回值,那个base
2,事件监听的其实就是对端连接的套接字,即文件描述符,所以要说明这个事件绑定的文件描述符是什么
3,对捆绑在这个时间上的文件描述符,做什么事——读?写?异常?EV_READ(一次读事件)、EV_WRITE(一次写事件)、EV_PERSIST(持续触发,需要结合event_base_dispatch函数使用)
4,回调函数即回调函数的参数
返回值:成功创建的event,struct event *ev

struct event* event_new(struct event_base *base, evutil_socket_t fd, short what, event_callback_fn cb, coid *argc);

添加事件到event_base

int event_add(struct event *ev, const struct timeval *tv);

1,event_new的返回值
2,时间,传NULL表示不会超时,一直等到事件被触发,回调函数会被调用,一般就传NULL表示一定会被调用

销毁事件

int event_free(struct event *ev);//ev 就是event_new的返回值

主要还是对各个函数各个参数类型的认识与把握

原创文章 119 获赞 27 访问量 5968

猜你喜欢

转载自blog.csdn.net/qq_37299596/article/details/106085472