• PHP libevent函数基本介绍


    3.2   主要函数介绍

    按照使用libevnet库顺序,看一下相关函数做什么操作。

    3.2.1  event_init

    调用event_base_new,初始化struct event_base对象。

    event_base_new里做了如下工作:

    1、 申请内存

    2、 初始化定时器堆和事件队列

    3、 为event_base对象选择底层事件函数封装对象。根据编译选项,初始化eventops全局对象。该对象存放指向底层select/pool/epoll等功能的封装函数。

    4、 初始化活动队列。

    3.2.2  event_set

    初始化structevent对象。

    1、 把参数中指定初始化的事件对象的ev_base指向全局的current_base。

    2、 赋值回调函数、描述符、监视事件等变量。

    3.2.3  event_base_set

    把struct event对象指向的event_base对象赋值为指定的对象。

    event_set函数把event对象的ev_base指向全局的current_base,多线程环境下,如需要用自己的event_base对象,需要调用event_base_set重新指定event_base对象。

    3.2.4  event_add

    增加指定event到监控池里。

    1、 对于读、写、信号事件,调用封装的add函数,调用底层select/pool/epoll相关函数,增加到操作系统事件监控里。对于epoll,调用的是epoll_add函数。Epoll_add函数调用epoll_ctl添加事件监控,libevent使用水平触发方式。把监听时间加入到event_base的事件队列中。

    2、 对应定时器事件,加入到event_base的定时器最小堆里。

    3、 对信号事件,调用evsignal_add,加入事件处理队列中。

    3.2.5  event_base_loop

    事件循环,事件发生后,调用相应回调函数。

    1、 计算最近的超时时间:定时器最小堆按照超时时间排序,取最小的超时时间;如已有活动事件或指定不阻塞,超时时间为0。

    2、 调用dispatch。对epoll,对应epoll_dispatch函数。该函数调用epoll_wait监控指定事件。

    3、 把到了超时时间的时间加入到活动事件队列。从超时时间最小堆中依次取最小超时时间和当前时间比较,对小于/等于当前时间的事件,加入到活动事件队列。

    4、 循环调用活动事件队列中所有事件的回调函数。

    epoll_dispatch:

    1.      计算epoll_wait函数需要的超时时间,把时间转换成微妙。

    2.      如epoll_wait被信号中断,把相应信号对应的事件加入到活动事件队列。

    3.      如监视的描述上发生了特定事件,把相应事件对象加入到活动事件队列。

    libevent函数库

    event_base_free() 释放资源,这不能销毁绑定事件
    event_base_loop() 处理事件,根据指定的base来处理事件循环
    event_base_loopbreak() 立即取消事件循环,行为各break语句相同
    event_base_loopexit() 在指定的时间后退出循环
    event_base_new() 创建并且初始事件
    event_base_priority_init() 设定事件的优先级
    event_base_set() 关联事件到事件base
    event_buffer_base_set() 关联缓存的事件到event_base
    event_buffer_disable() 禁用一个缓存的事件
    event_buffer_enable() 启用一个指定的缓存的事件
    event_buffer_fd_set() 改变一个缓存的文件系统描述
    event_buffer_free() 释放缓存事件
    event_buffer_new() 建立一个新的缓存事件
    event_buffer_priority_set() 缓存事件的优先级设定
    event_buffer_read() 读取缓存事件中的数据
    event_buffer_set_callback() 给缓存的事件设置或重置回调hansh函数
    event_buffer_timeout_set() 给一个缓存的事件设定超时的读写时间
    event_buffer_watermark_set 设置读写事件的水印标记
    event_buffer_write() 向缓存事件中写入数据
    event_add() 向指定的设置中添加一个执行事件
    event_del() 从设置的事件中移除事件
    event_free() 清空事件句柄
    event_new() 创建一个新的事件
    event_set() 准备想要在event_add中添加事件

  • 相关阅读:
    tomcat下的web.xml和项目中的web.xml
    tomcat日志详解
    tomcat日志及logback相关日志框架
    关于程序中使用servlet-api.jar和jsp-api.jar与服务器lib包jar包冲突的问题
    windows server数据库备份
    idea为tomcat设置虚拟地址
    GitHub
    MarkDown的用法
    SVN添加用户权限
    第一篇小记
  • 原文地址:https://www.cnblogs.com/ylcms/p/7614756.html
Copyright © 2020-2023  润新知