libevent库

news2024/9/20 20:00:00

libevent介绍

1 事件驱动, 高性能, 轻量级, 专注于网络
2 源代码精炼, 易读
3 跨平台
4 支持多种I/O多路复用技术, 如epoll select poll等
5 支持I/O和信号等事件

libevent的核心实现:

在linux上, 其实质就是epoll反应堆.
libevent是事件驱动, epoll反应堆也是事件驱动, 当要监测的事件发生的时候, 就会调用事件对应的回调函数, 执行相应操作. 特别提醒: 事件回调函数是由用户开发的, 但是不是由用户显示去调用的, 而是由libevent去调用的.

libevent的地基-event_base

使用libevent 函数之前需要分配一个或者多个 event_base 结构体, 每个event_base结构体持有一个事件集合, 可以检测以确定哪个事件是激活的, event_base结构相当于epoll红黑树的树根节点, 每个event_base都有一种用于检测某种事件已经就绪的 “方法”(回调函数)
通常情况下可以通过event_base_new函数获得event_base结构。
下面介绍一些常用函数:
相关函数说明:

1 struct event_base *event_base_new(void);    //event.h的L:337

函数说明: 获得event_base结构
参数说明: 无
返回值:
成功返回event_base结构体指针;
失败返回NULL;

2 void event_base_free(struct event_base *);   //event.h的L:561
函数说明: 释放event_base指针
3 int event_reinit(struct event_base *base);  //event.h的L:349

函数说明: 如果有子进程, 且子进程也要使用base, 则子进程需要对event_base重新初始化, 此时需要调用event_reinit函数.
函数参数: 由event_base_new返回的执行event_base结构的指针
返回值: 成功返回0, 失败返回-1

对于不同系统而言, event_base就是调用不同的多路IO接口去判断事件是否已经被激活, 对于linux系统而言, 核心调用的就是epoll, 同时支持poll和select.

查看libevent支持的后端的方法有哪些:

const char **event_get_supported_methods(void);

函数说明: 获得当前系统(或者称为平台)支持的方法有哪些
参数: 无
返回值: 返回二维数组, 类似与main函数的第二个参数**argv.

const char * event_base_get_method(const struct event_base *base);

函数说明: 获得当前base节点使用的多路io方法
函数参数: event_base结构的base指针.
返回值: 获得当前base节点使用的多路io方法的指针

使用libevent库的步骤:

1 创建根节点–event_base_new
2 设置监听事件和数据可读可写的事件的回调函数
设置了事件对应的回调函数以后, 当事件产生的时候会自动调用回调函数
3 事件循环–event_base_dispatch
相当于while(1), 在循环内部等待事件的发生, 若有事件发生则会触发事件对应的回调函数。
4 释放根节点–event_base_free
释放由event_base_new和event_new创建的资源, 分别调用event_base_free
和event_free函数.

事件驱动-event

事件驱动实际上是libevent的核心思想, 本小节主要介绍基本的事件event。
主要的状态转化:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/22081.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

硬件基础 -- D/A数字模拟信号

D/A 需要数位模拟开关 如果开关打卡,则此位电压参与运算 如果开关关闭,则此位电压0V参与运算 转换过程中需要将数字数字量锁存 转换过程 模拟量转数字量需要比较器 数字量转模拟量需要运放 #mermaid-svg-wJVhc3DQ619gtYuZ {font-family:"trebuchet …

【计算机毕业设计】6.超市仓库管理系统+vue

一、系统截图(需要演示视频可以私聊) 基于B/S的超市进销存管理系统的设计与实现 摘 要:开发本超市进销存管理系统的主要目标是方便企业对商品、客户和员工信息的实时掌控,提高企业的工作效率。本系统是采用java开发的一个基于B/S…

渗透测试——基于SQL注入拿到webshell

作者名:Demo不是emo 主页面链接:主页传送门创作初心:舞台再大,你不上台,永远是观众,没人会关心你努不努力,摔的痛不痛,他们只会看你最后站在什么位置,然后羡慕或鄙夷座右…

spring整合struts2

因为最近工作的需要不得不学习struts2,整理了一下spring整合struts2的过程 需要详细了解struts2的朋友可以自行百度,这里只是简单的讲述如何使用 我是用的是idea进行项目构建的,eclipse的话可以自己百度一下 struts的官网:https:…

PTA题目 阶梯电价

为了提倡居民节约用电,某省电力公司执行“阶梯电价”,安装一户一表的居民用户电价分为两个“阶梯”:月用电量50千瓦时(含50千瓦时)以内的,电价为0.53元/千瓦时;超过50千瓦时的,超出部…

前缀和【一维前缀和与二维前缀和】

全文目录😀 一维前缀和🤔 构建一维前缀和数组😵‍💫 子序列的和😀 二维前缀和🤔 构建二维前缀和数组😵‍💫 子矩阵的和😀 一维前缀和 一维前缀和很简单,就是…

[附源码]java毕业设计铁路法院数字档案管理系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

[附源码]java毕业设计网上花店系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

同步时序逻辑电路

分类 按逻辑功能不同分为:RS触发器、D触发器、JK触发器、T触发器。按触发方式不同分为:电平触发器、边沿触发器和脉冲触发器。按电路结构不同分为:基本RS触发器和钟控触发器。按存储数据原理不同分为:静态触发器和动态触发器。按…

【从零开始学微服务】03.软件架构的演化过程

大家好,欢迎来到万猫学社,跟我一起学,你也能成为微服务专家。 目前大部分的企业系统和互联网应用都是采用Web的形式提供服务能力,根据系统的组织方式和部署结构,我们通常把软件架构的演化过程分为以下几个阶段&#xf…

微信小程序实战,基于vue2实现瀑布流

1、什么是瀑布流呢? 瀑布流,又称瀑布流式布局。是比较流行的一种网站页面布局,视觉表现为参差不齐的多栏布局,随着页面滚动条向下滚动,这种布局还会不断加载数据块并附加至当前尾部。 瀑布流对于图片的展现&#xff0c…

HTML+CSS+JS大作业:生态环境网站设计——环境保护主题 大学生环保主题网页制

⛵ 源码获取 文末联系 ✈ Web前端开发技术 描述 网页设计题材,DIVCSS 布局制作,HTMLCSS网页设计期末课程大作业 | 环境保护 | 保护地球 | 校园环保 | 垃圾分类 | 绿色家园 | 等网站的设计与制作HTML期末大学生网页设计作业 HTML:结构 CSS:样…

【计算机编程基础】

计算机编程基础1 本节目标2 编程语言2.1 编程2.2 计算机语言2.3 编程语言2.4 翻译器2.5 编程语言和标记语言区别3 计算机基础3.1 计算机组成3.2 数据存储3.3 数据存储单位3.4 程序运行1 本节目标 说出什么是编程语言区分编程语言和标记语言的不同说出常见的数据存储单位及其换…

Maven入门学习——使用IDEA创建Maven文件的两种方式(内含配置setting文件)

使用IDEA创建Maven文件的两种方式一、前言二、前期准备(配置setting文件)1.修改文件放置位置2.改用阿里云镜像3.修改默认JDK版本三、构建Maven项目1.新建空项目2.设置项目中Maven版本3.新建模块4.配置模块5.测试四、使用插件创建Maven项目1.新建Maven项目…

Python字典制作“编码本”“密码本”,“试炼”加、解密文本操作

【点击此处跳转笔记正文】Python 官网:https://www.python.org/ Free:大咖免费“圣经”教程《 python 完全自学教程》,不仅仅是基础那么简单…… My CSDN主页、My HOT博、My Python 学习个人备忘录好文力荐、 老齐教室 自学并不是什么神秘的…

【k8s】2、二进制安装k8s

文章目录一、环境准备二、操作系统的初始化三、部署Etcd集群1、 准备cfssl证书生成工具2、生成etcd证书3、部署Etcd集群四、安装docker(所有node节点)五、部署master组件1、 准备证书2、 准备二进制文件、token3、 启动kube-apiserver服务4、启动scheduler服务5、启动controlle…

SpringBoot SpringBoot 开发实用篇 4 数据层解决方案 4.15 ES 文档操作

SpringBoot 【黑马程序员SpringBoot2全套视频教程,springboot零基础到项目实战(spring boot2完整版)】 SpringBoot 开发实用篇 文章目录SpringBootSpringBoot 开发实用篇4 数据层解决方案4.15 ES 文档操作4.15.1 文档操作4.15.2 小结4 数据…

最新最全面的Spring详解(四)——面向切面编程

前言 本文为 【Spring】面向切面编程 相关知识,下边将对AOP概述(包含什么是AOP、AOP相关术语、Spring AOP通知类型),Spring AOP能力和目标,AOP代理,AspectJ风格的支持(包含对于 AspectJ的支持、…

[附源码]java毕业设计图书馆自习室管理系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

LIO-SAM

3D激光SLAM:位姿融合输出,LIO-SAM 提出了一个利用GT-SAM的紧耦合激光雷达惯导里程计的框架。实现了高精度、实时的移动机器人的轨迹估计和建图。这里主要讲解如何通过imu来进行位姿融合输出的。 LIO-SAM的全称是:Tightly-coupled Lidar Iner…