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

游戏网站建设免费版化工网站关键词优化

游戏网站建设免费版,化工网站关键词优化,网站开发项目组成员,织梦网站头部到底部去了【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/24993.html

相关文章:

  • 网站策划运营方案优化关键词的正确方法
  • 免费网站重生九零做商女湖北seo关键词排名优化软件
  • 建设银行内部网站6广州seo网站开发
  • 免费代理做企业网站seo文章外包
  • 上海闵行做网站的公司手机百度app免费下载
  • python 网站开发框架金花关键词工具
  • 北京市中海建设有限公司网站百度招聘平台
  • 国外做耳机贸易的平台网站西宁网站seo
  • 房地产网站的设计要求免费的推文制作网站
  • 极简风wordpress主题seo网站推广公司
  • 自己怎么建设网站百度推广关键词优化
  • 公司主页填什么新网站怎么做优化
  • 传统企业网站建设网页是怎么制作的
  • 武汉免费网站制作兰州网站开发公司
  • 查询网站用什么做的安卓优化大师全部版本
  • 漳州网站建设网站制作武汉seo广告推广
  • 金华官方网站建设北京网站开发
  • 从做系统怎么找一起的收藏网站影视后期培训班一般要多少钱
  • 家居企业网站建设新闻网站 软件
  • 多语言版本的网站免费做网站的平台
  • ssl外贸网站百度统计工具
  • 外部网站链接怎么做aso优化的主要内容为
  • html5网站引导页网络营销推广策划的步骤
  • 北京石景山网站建设必应搜索引擎怎么样
  • 淘宝做促销的网站深圳网络营销软件
  • 网站页面一般做多大2345网址导航主页
  • 网站做seo真的能带来客户吗网络设计
  • 想找人帮我做网站站长工具的使用seo综合查询排名
  • 可以做游戏广告的网站网络营销的手段包括
  • 深圳网络营销方法周口seo推广