当前位置: 首页 > wzjs >正文

游戏网站建设免费版重庆做优化的网络公司

游戏网站建设免费版,重庆做优化的网络公司,wordpress启用两个主题,企业公众号 开发商城【Linux】【网络】Libevent基础 libevent 是轻量级 c语言实现的 网络io库 能够跨平台 且线程安全 是单线程的 libevent 的使用过程通常包括几个主要步骤: 1.创建Libevent实例2.注册事件、添加事件、设置处理事件回调函数3.启动事件循环4.清理资源 1. 创建Libeven…

【Linux】【网络】Libevent基础

libevent 是轻量级 c语言实现的 网络io库 能够跨平台 且线程安全 是单线程的
libevent 的使用过程通常包括几个主要步骤:

  • 1.创建Libevent实例
  • 2.注册事件、添加事件、设置处理事件回调函数
  • 3.启动事件循环
  • 4.清理资源

1. 创建Libevent实例 (event_base)

在使用 libevent 时,首先需要创建一个 event_base 对象,它负责管理事件的循环和事件的分发。每个 event_base 可以管理多个事件。

  • 关键函数

    • event_base_new():创建一个新的事件基础(event_base)。
    • event_base_free():释放 event_base 对象。
    struct event_base *base = event_base_new();
    if (!base) {perror("Unable to create event base");return 1;
    }
    

2.注册事件、添加事件、设置处理事件回调函数

2.1注册事件、添加事件到事件循环

接下来,用户需要创建事件对象event),这些事件会被注册到事件循环中。事件对象表示一个具体的 I/O 操作(例如,监听文件描述符的读取、写入)或者定时任务。

  • 关键函数

    • event_new():创建一个新的事件对象。
    • event_add():将事件添加到事件循环中。
    • event_del():从事件循环中删除事件。
    • event_free():释放事件对象。
    struct event *ev = event_new(base, fd, EV_READ | EV_PERSIST, on_event, NULL);
    event_add(ev, NULL);
    

源码实现event_new() 会创建一个事件对象,并根据提供的文件描述符和事件类型(读、写、信号等)进行初始化。底层会根据 event_base 的选择来调度相应的 I/O 多路复用机制(如 epollkqueue)。

2.2设置处理事件回调函数

当事件发生时,libevent 会调用注册的回调函数。回调函数中处理相应的业务逻辑(例如,读取数据、写入数据、处理信号等)。

  • 关键函数

    • 事件对象创建时传入的回调函数:例如上面 on_event
    void on_event(evutil_socket_t fd, short what, void *arg) {// 事件处理逻辑printf("Event triggered!\n");
    }
    

源码实现:回调函数是用户传入的处理函数,libevent 会在合适的时机(例如文件描述符变为可读/可写,定时器到期等)触发回调。

3. 启动事件循环 (event_base_dispatch)

创建并注册完事件后,接下来就是启动事件循环。事件循环会持续运行,直到所有事件都处理完成。libevent 会调用底层的 I/O 多路复用机制(如 epoll_wait()kqueue())来等待事件的发生。

  • 关键函数

    • event_base_dispatch():启动事件循环并开始处理事件。
    • event_base_loop():也是启动事件循环的函数,提供更多控制选项。
    event_base_dispatch(base)`; //event_base_new() 创建的event_base Libevent实例
    

源码实现event_base_dispatch() 会调用 eventop->dispatch(),即具体的 I/O 多路复用机制(如 epollkqueue)。它会等待文件描述符的事件发生,并调用相应的事件回调函数。

4.事件清理

在不再需要某个事件时,需要删除该事件,防止内存泄漏或逻辑错误。libevent 提供了清理事件的接口。

  • 关键函数

    • event_del():删除事件。
    • event_free():释放事件对象。
    • event_base_free():释放 event_base
    event_del(ev);
    event_free(ev);
    event_base_free(base);
    

源码实现

  • event_del() 会event_del() 的作用是从事件基础(event_base)中删除一个已经注册的事件。删除事件意味着该事件将不再参与事件循环,也不会被触发。
  • event_free() 释放事件对象的内存,在调用 event_del() 删除事件后,event_free() 会释放事件对象所占的内存
  • event_base_free() event_base_free() 用于释放 event_base 对象,它会释放事件基础结构中的所有事件,并清理与之相关的资源。event_base 是事件系统的核心,它管理着所有的事件和底层 I/O 多路复用机制。

5. 定时器事件

libevent 支持定时器事件,可以在指定时间后触发回调函数。定时器事件通常用于周期性任务或者延迟任务。

  • 关键函数

    • event_add():为定时器事件指定时间间隔。
    • event_new():创建定时器事件。
    struct event *ev = event_new(base, -1, EV_PERSIST, on_timer, NULL);
    struct timeval one_second = {1, 0};  // 每秒触发一次
    event_add(ev, &one_second);
    

源码实现:定时器事件的处理使用了 event_add() 来将定时器事件与事件循环关联。libevent 会使用底层的 selectpoll 等机制来管理定时器事件,并通过系统定时器触发事件。

总结

libevent 的核心流程是:创建事件基础 (event_base),创建事件对象 (event)并将其添加到事件循环(event_add())中,启动事件循环 (event_base_dispatch()) 处理事件,回调处理事件,然后清理资源。

这些步骤在源码中主要通过以下接口实现:

  • 事件基础创建与释放event_base_new(),event_init() ,event_base_free()
  • 事件创建与添加event_new(), event_add(), event_del()
  • 事件循环event_base_dispatch(), event_base_loop()
  • 回调处理:用户定义的回调函数
  • 定时器处理event_add(), event_new()
  • 事件清理event_del(), event_free(), event_base_free(base);

后面会写一下libevent 内核实现和reactor模式

http://www.dtcms.com/wzjs/1997.html

相关文章:

  • 做网站端口内容无法替换关键词排名点击器
  • 中国新闻发布武汉seo优化服务
  • 青岛建站平台安装百度
  • 台州建设局网站信息价网站seo重庆
  • 地方门户网站系统seo咨询顾问
  • 中山企业网站推广公司天津做网站的网络公司
  • 公司微信网站建设方案现在什么app引流效果好
  • 杭州工程招标网seo关键词首页排名
  • 深圳大型网站建设太原seo公司
  • 企业网站作用seo经典案例分析
  • 建设网站导航网络营销的成功案例有哪些
  • 北京做网站好的关闭站长工具seo综合查询
  • 58同城网站建设方案saas建站
  • 鹿邑网站建设网站优化检测
  • 前端做网站的兼职廊坊百度提升优化
  • 网站建设中的定位设想360竞价推广客服电话
  • 搞一个网站花多少钱十大网络舆情案例
  • 头条站长平台seo的基本工作内容
  • 自己建网站要多少钱河南百度关键词优化排名软件
  • 匿名网站建设营销托管全网营销推广
  • 品牌制作网站网络营销的表现形式有哪些
  • 桂林北京网站建设广州头条今日头条新闻
  • 自媒体网站开发河南郑州最新消息今天
  • 学校网站建设 效果淘宝店铺转让价格表
  • 酒店网站建设的构思网络优化seo是什么工作
  • 网站建设suteng推广策划方案模板
  • 杭州做网站公司哪家好百度快速优化推广
  • 厚街镇网站建设公司企业推广方式
  • 网站备案信息真实性核验单 如何填写商业软文案例
  • 购物网站制作样例想在百度做推广怎么做