基础概念
- 官网:
- libevent API提供一种机制,可以在以下情况下执行回调
- fd上出现具体事件、超时时间到达后、支持信号、定期超时产生的回调。
- libevent 旨在取代 事件驱动的网络服务器中的事件循环,程序只需要调用event_dispatch,然后动态添加或删除事件,无需更改事件循环。
- 支持 可移植应用程序开发、提供可扩展的事件通知机制、支持多线程。
- libevent为缓存网络IO提供 复杂框架,支持socket、过滤器、速率限制、SSL、零拷贝文件传输和IOCP。
- libevent:C实现的异步事件库,支持注册异步事件、检测异步事件以及根据事件的触发先后顺序来调用相应的回调函数。
- 事件类型:
- 网络IO事件:如Linux中的epoll等IO多路复用
- 定时事件:红黑树、最小堆、跳表
- 信号事件:
主要内容
组件
event
- 表示单个具体事件,包括事件类型、事件回调等。
- 事件类型:
- IO事件:fd可读就绪、可写就绪、发生异常。
- 定时器事件:在指定时间间隔后触发。
- 信号事件:当特定信号发生时触发。
- 持续事件:定期触发,执行周期性任务。
event_base
buffer
evbuffer
bufferevent
- 基于buffer和evbuffer的更高层次的抽象,用于简化网络数据的读写。
- 水位/阈值:缓冲区中数据量到达一定阈值触发相应事件。
- 以TCP连接事件为例,设置读阈值=1024字节,当接收数据>=1024时,bufferevent处于可读状态并触发读事件。
- 同样设置写阈值=4096字节