当前位置:   article > 正文

libevent 接口函数 event, bufferevent_libevent eventbuff

libevent eventbuff

event_base  : 跟踪事件

event_new() : 监听描述符 fd

event_add() :添加事件监听

event_base_dispatch()  : 循环 分发事件

event_enable_debug_mode () : 开启debug

event_assign : 自定义结构 控制描述符

  1. 编译:Setting up the Libevent library

event_set_log_callback : 重写 log

event_set_mem_functions : 内存申请

多线程是不安全的 , 在libevent 上锁, 需要告诉libevent 哪些 locking 函数要使用。 使用evthread_set_lock_callbacks  和 evthread_set_id_callback 

调试lock evthread_enable_lock_debuging

调试事件, (使用 event_assign 可能会耗尽内存) 调试事件 需要额外的内存和cpu ,需要调用  event_enable_debug_mode ; 更多调试细节需要 -DUSE_DEBUG 编译

LIBEVENT_VERSION_NUMBER  : libevent的版本

libevent_global_shutdown : free 全局变量 , 只能确认内部全局变量释放,不能释放通过函数返回的变量

        2. create event_base

    • 每个event_base 有一系列events ,每个base 都有个backend 方法,比如epoll, 多线程则需要多个base
    • event_config_avoid_method 在程序中控制使用底层方法 epoll,event_config_avoid_method(cfg, "select");
    • event_config_require_feature ET
    • EVENT_BASE_FLAG_NO_CACHE_TIME 超时回调后 检查当前时间
    • event_config_set_num_cpus_hint : Windows iocp
    • event_base_get_features : 支持的特性 , 还有其他支持的函数

        3. event loop :

    • event_base_loop :

EVLOOP_ONCE  等待直到事件活跃,执行完毕后return

EVLOOP_NONBLOCK ,不会等待event trigger ,只会检查目前是否有event ,一次性

EVLOOP_NO_EXIT_ON_EMPTY 没有pending或active事件不会退出

    • event_base_dispatch: 一直keep running
    • event_base_loopbreak: 停止当前循环 ,立即停止
    • event_base_loopexit : 非立即停止
    • event_base_dump_events : debug 添加的event

        4. event

    • make event pending , call event_add() ,本身初始化时non-pending 的
    • callback () fd, 触发事件 ,参数
    • evutil_make_socket_nonblocking 非阻塞
    • event_new 绑定的fd , fd需要先处理, 比如设置为非阻塞, 创建socket ,listen fd
    • 默认情况, 事件触发过一次,想要再次触发,可以在callback中调用event_add 。 fd 准备好读或者写时, pending 变成 active , 在回调调用前, event 是变成non -pending 的
    • 如果事件是 EV_PERSIST  , event 仍然保持 pending 即使此时回调可以被调用
    • event_self_cbarg : 自己变成参数
    • evtimer_new : 一些timer回调宏定义
    • 不要调用event_assign 在一个已经pending 的event , 如果event已经初始化并且pending,在assign之前 event_del
    • 若想保持和libevent 二进制兼容性, event_assign 时, event_get_struct_event_size 得到大小
    • event_del 对non pending 和 active 无效
    • event_remove_timer 移除event 上的 timer 超时
    • 设置事件处理优先级, 先event_base_priority_init, 再 event_priority_set
    • event_pending : 如果event 是pending或者active 返回 what argument 的设置,EV_READ这些
    • event_get_assignment : 复制 event what
    • event_base_once : 只处理一次 event ,不能手动删除
    • event_active : 手动触发event
    • event_base_init_common_timeout : 相同的timeout 的event 放在 queue中 O(1)时间复杂度 , 根据返回值 使用
    • event_initialized 判断event 是否初始化

        5. utility and portable function

    • evutil_socket_t : linux 下是 typedef int ; windows 是 intptr_t
    • evutil_timeradd :操作timeval add
    • evutil_gettimeofday  :当前时间
    • evutil_closesocket : 关闭socket
    • EVUTIL_SOCKET_ERROR : socket 错误码
    • evutil_make_socket_nonblocking : 非阻塞 , O_NONBLOCK on Unix
    • evutil_make_listen_socket_reuseable : listener socket关闭后,可以立即被其他socket使用 , 处理服务器重启 TIME_WAIT 情况
    • evutil_make_socket_closeonexec : fork exec 后关闭 fd
    • evutil_inet_ntop , evutil_inet_pton : 转换ip 点分十进制和二进制

        6. bufferevent 

    • 四种类型 socket-based , asynchronous-IO, filtering bufferevents, paired bufferevents
    • 4 种 watermarks: Read low-water mark , 高于等于会调用 读callback ,Read High 则不读 ,默认无限;Write Low 高于开始写; Write High 不会被直接调用。
    • 在比如连接关闭,或者其他错误, 会有错误 BEV_EVENT_READING 等 。
    • BEV_OPT_DEFER_CALLBACKS 延迟callback , BEV_OPT_CLOSE_ON_FREE 结束时释放fd
    • bufferevent_socket_new 创建bufferevent
    • bufferevent_socket_connect : 如果bufferevent的socket没有connect,可以使用这个,起到connect作用
    • Bufferevents  是内部引用计数,等到挂起的回调执行完毕才会被删除, bufferevent_free
    • BEV_OPT_CLOSE_ON_FREE  , free时 关闭socket
    • bufferevent_enable : 开启某个事件 。 新创建的默认的开启WRITE
    • bufferevent_get_input : 返回 buffer , 可读,数据被应用remove
    • bufferevent_get_output : 返回写buffer , 可写, 数据被应用add到buffer
    • bufferevent_write : 添加数据到output buffer
    • bufferevent_set_timeouts : 设置超时 , 当尝试读 超过 timeout ,event变成disable
    • bufferevent_flush : 强制bufferevent 读或者写

        7. bufferevent -advance

    • bufferevent_pair_new : paird bufferevent
    • bufferevent_filter_new : 封装一层 bufferevent
    • bufferevent & rate-limiting : token bucket 限制速率 , ev_token_bucket_cfg_new
    • bufferevent_rate_limit_group_new : 限制组速率 , 一组bufferevent
    • bufferevent_rate_limit_group_set_min_share: 设置组共享数, 速率/share

        8. ev_buffer

    • evbuffer 是用字节队列实现的, 在末端添加数据,头部移除数据
    • evbuffer_new :创建buffer
    • evbuffer_enable_locking : 可以使用锁 evbuffer_lock:加锁
    • evbuffer_get_length : evbuffer 的字节数
    • evbuffer_copyout : 复制,而不remove
    • evbuffer_drain : 移除 n 字节数据
    • evbuffer_remove : 移除并且拷贝到 data, n字节
    • evbuffer_readln 按行读 , 有参数控制\r\n
    • evbuffer_ptr_set :控制buffer 指针移动
    • evbuffer_reserve_space : 扩大空间,返回的指针存在参数vec里, 需要提交evbuffer_commit_space
    • evbuffer_read : 从socket 写入buffer末端
    • evbuffer_cb_func : evbuffer 回调
    • evbuffer_add_cb : 添加回调
    • evbuffer_remove_cb_entry :删除回调
    • evbuffer_add_reference : 不拷贝, evbuffer存储数据的指针
    • evbuffer_add_file : 文件写入网络
    • evconnlistener_new : 返回listener
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/742753
推荐阅读
相关标签
  

闽ICP备14008679号