1) struct event_config *event_config_new(void)
函数功能: 分配一个base 内部配置结构体
参数: 无
返回值:
成功返回指向struct event_config的指针
失败返回空

2) void event_config_free(struct event_config *cfg)
函数功能: 释放一个struct event_config结构体
参数:指向base内部配置的结构体的指针
返回值:无

3) int event_config_set_flag(struct event_config *cfg, int flag)
函数功能: 设置配置的标志位  为了后面的new base做准备
参数介绍:
cfg: 配置内部结构体用event_config_new()创建
flag: 配置的标记 会影响之后创建base时候的一些限制 取值为
EVENT_BASE_FLAG_NOLOCK               //禁止对event_base 分配锁
EVENT_BASE_FLAG_IGNORE_ENV           //禁止检查EVENT_*的环境变量 如"EVENT_PRECISE_TIMER"
EVENT_BASE_FLAG_NO_CACHE_TIME        //base不缓存时间, 缓存时间是为了避免多次调用系统函数获得时间
EVENT_BASE_FLAG_EPOLL_USE_CHANGELIST /*如果后台方法是epoll,则此模式是指可以安全的使用libevent内部                                                                                                     changelist 进行批量增删而尽可能减少系统调用,这种模式可以让代                                                                                                   码性能更高,但是可能会引起Linux bug 如果有任何由dup()或者他                                                                                                 的变量克隆的fds,则是不安全的,这样做会引起奇怪并且难以检查的                                                                                                   bug */
EVENT_BASE_FLAG_PRECISE_TIMER        /*使用精度高的定时器 如CLOCK_MONOTONIC, 如果系统支持                                                                                                          timerfd_create() 则在epoll会使用此系统定时器
不设置的话默认使用CLOCK_MONOTONIC_COARSE(如果系统支持),了解                                                                                      此宏,可以看clock_gettime()系统函数的使用*/
返回值:
成功返回 0,失败返回-1

4) int event_config_avoid_method(struct event_config *cfg, const char *method)
函数功能: 由于event base 支持多种io机制,如poll/epoll/select等,若我们不想让让event base选择哪个,那么我们就可以用此函数设                   置禁止的io机制
要想禁止多个可以多次调用此函数,内部用链表保存禁止的项
参数:
cfg: 内部配置结构体指针
method: 禁止的io机制 取值为 "evport","kqueue","epoll","devpoll","poll","select"
返回值:
成功返回 0,失败返回-1

5) int event_config_require_features(struct event_config *cfg, int features)
函数功能: 设置配置的特性,event base会选择含有设置特性的io机制
对配置设置此特性 主要是为了筛选合适的io机制
对于各个io机制支持的 特性如下:
"evport":无
"kqueue":  EV_FEATURE_ET|EV_FEATURE_O1|EV_FEATURE_FDS
"epoll":   EV_FEATURE_ET|EV_FEATURE_O1|EV_FEATURE_EARLY_CLOSE
"devpoll": EV_FEATURE_FDS|EV_FEATURE_O1
"poll":    EV_FEATURE_FDS
"select":  EV_FEATURE_FDS
参数:
cfg: 内部配置结构体指针
features: 特性值 如下
EV_FEATURE_ET          边缘触发触发机制,高效但是容易丢消息,注意与水平触发区分
EV_FEATURE_O1          要求具有很多事件的io机制可以以近似O(1)处理事件,select和poll无法提供这种特征,它们只                                                      能提供近似O(N)的操作
EV_FEATURE_FDS         io机制可以处理包括sockets在内的各种文件描述符
EV_FEATURE_EARLY_CLOSE 检查事件连接是否关闭,可以使用此特性来检测链接是否关闭,而不需要读取此链接所有                                                                    未 决数据
返回值:
成功返回 0, 失败返回-1

6) int event_config_set_max_dispatch_interval(struct event_config *cfg,
const struct timeval *max_interval,
int max_callbacks,
int min_priority)

函数功能:
event base用一个数组根据优先级设置多个激活队列,值越小优先级越高
此函数用于设置处理某个优先级队列的时候的一些时间和处理回调个数的限制

参数:
cfg:内部配置结构体
max_interval:  某个激活队列处理的时间间隔,如果在某个优先级队列处理的时间超过了此值,则退出当前队列,处理下一个队列
max_callbacks: 某个激活队列中 处理的回调的个数,当某个队列处理的激活个数大于此值,则处理下一个队列

min_priority:  由于处理事件的时候根据优先级把激活的事件放到了不同的队列(一个数组实现的不同队列)
当数组下标小于此值的时候, 那么此下标对应的队列将不会被max_callbacks和max_interval所限制
当数组下标大于等于此值的时候,会受到max_callbacks和max_interval的限制
返回值:
永远返回 0,所以保证你传入的参数不要有问题,否则可能会出现无法预知的错误

1) struct event_config *event_config_new(void)函数功能: 分配一个base 内部配置结构体参数: 无返回值: 成功返回指向struct event_config的指针 失败返回空2) void event_config_free(struct event_config *cfg)函数功能: 释放一个struct event_...
LIBEVENT :是一款事件驱动的网络开发包,由于采用C语言开发体积小巧,跨平台,速度极快.课程中讲解分析 LIBEVENT 原理,跨平台编译事件1O、缓冲O处理。讲解HTTP服务端开发示例,HTTP客户端请求开发示例,最后基于 LIBEVENT T创建线程池C++框架,并用此框架完成FTP服务器的登录、目录访问、文件上传下载能功能。开发环境操作系统: windows1064位和 ubuntu18.0464位 Libevent 版本:2.1.8Windows开发工具:VS2017社区版ubuntu开发工具:g++make开发语言:C/C++课程亮点全称代码演示:课程中的每一行代码都会敲出来,并详解代码实际案例展示:基于 LIBEVENT 实现线程池和HTTP和TP服务器跨平台讲解:基于 WINDOWS、LNUX( UBUNTU18.04)平台开发移植
目录 libevent 接口分析事件 Event 处理 libevent 是一款事件驱动的网络开发包,由于采用c语言开发体积小巧,跨平台,速度极快。大量开源项目使用了 libevent 比如谷歌浏览器和分布式的高速缓存系统Memcached。ib event 支持kqueue、select.poll epoll、iocp。内部事件机制完全独立于公开的事件APl, Libevent 支持跨平台可以在Linux、*BSD、Mac OS x、Solaris、Windows等平台上编译。下载地址 libevent .net 安装环境(环境有
event _ config _ new 配置文件配置项 event _base_ config _flag和 event _ config _set_flag 先看 event _base_ config _flag 按优先顺序排列的后端数组 static const struct event op * event ops[] = { #ifdef EVENT __HAVE_ EVENT _PORTS &evportops, #endif #ifdef EVENT __HAVE_WORKING_KQUEUE &kqops,   本文将重点 介绍 event _base 相关 的几个接口 函数 ,包括: * event _base_ new (), event _base_free(), event _base_loop(), * event _base_ new _with_ config () 二. 函数 介绍 (1) event _base_ new () 函数 函数 功能如字面意思,即建立一个新的 event _bas...
如果你打开 Libevent 的一些文件,比如util.h文件。就会发现使用了很多宏定义,并根据一些宏定义而进行条件编译。这些宏定义往往来自 event - config .h文件中。         如util.h文件的代码开始处:
event _base_ new (void) struct event _base *base = NULL; // 初始化一个 event _base struct event _ config *cfg = event _ config _ new (); // 看下文注解 if (cfg) { base = event _base_ new _with_ config (cfg); // 将 event _conf
构建 event _base 在你开始使用任何 Libevent 前,你需要先创建一个或多个 event _base。每个 event _base管理着一个 event 的集合,并可以检测出哪些 event 被激活了。如果 event _base使用了锁,就可以在多线程中安全的访问它。但要注意它的主poll 函数 只能被单个线程运行。如果你想用多个线程运行IO迭代器,你需要为每个线程分配一个 event _base。 注:在以后
wget https://github.com/ libevent / libevent /releases/download/release-2.1.11-stable/ libevent -2.1.11-stable.tar.gz tar -xzvf libevent -2.1.11-stable.tar.gz cd libevent -2.1.11-stable ./ config ure make install 安装完成后,在 PHP 中使用 libevent 需要在 PHP.ini 中启用 event 扩展: extension= event .so 然后你就可以在 PHP 中使用 libevent 了。 示例代码: ```php $base = new Event Base(); $ event = new Event ($base, STDIN, Event ::READ | Event ::PERSIST, function($fd, $ event s, $arg) { static $max_requests = 0; if (++$max_requests >= 10) { Event ::del($arg); return; echo "stdin ready\n"; $ event ->add(); $base->loop(); 上面的代码创建了一个基于事件的循环,并监听标准输入的可读事件。当标准输入可读时,会执行回调 函数 。 有关 libevent 的更多信息,你可以参考官方文档:http://php.net/manual/en/book. event .php