E-COM-NET
首页
在线工具
Layui镜像站
SUI文档
联系我们
推荐频道
Java
PHP
C++
C
C#
Python
Ruby
go语言
Scala
Servlet
Vue
MySQL
NoSQL
Redis
CSS
Oracle
SQL Server
DB2
HBase
Http
HTML5
Spring
Ajax
Jquery
JavaScript
Json
XML
NodeJs
mybatis
Hibernate
算法
设计模式
shell
数据结构
大数据
JS
消息中间件
正则表达式
Tomcat
SQL
Nginx
Shiro
Maven
Linux
libevent源码分析
libevent源码分析
(2)--2.1.8--结构体 struct event和struct event_callback
一、event_callback结构体structevent_callback{//下一个回调事件TAILQ_ENTRY(event_callback)evcb_active_next;//回调事件的状态标识,具体为://#defineEVLIST_TIMEOUT0x01//event在time堆中,min_heap//#defineEVLIST_INSERTED0x02//event在已注册事件
录事参军
·
2024-02-07 01:18
libevent
libevent
libevent
Libevent源码分析
-----与event相关的一些函数和操作
Libevent提供了一些与event相关的操作函数和操作。本文就重点讲一下这方面的源代码。在Libevent中,无论是event还是event_base,都是使用指针而不会使用变量。实际上,如果查看Libevent不同的版本,就可以发现event和event_base这两个结构体的成员是不同的。对比libevent-2.0.21-stable和libevent-1.4.13-stable这两个版
amoscykl
·
2024-02-07 01:48
Libevent
Libevent
libevent
Libevent源码分析
-----信号event的处理
信号event的工作原理:前面讲解了Libevent如何监听一个IO事件,现在来讲一下Libevent如何监听信号。Libevent对于信号的处理是采用统一事件源的方式。简单地说,就是把信号也转换成IO事件,集成到Libevent中。统一事件源的工作原理如下:假如用户要监听SIGINT信号,那么在实现的内部就对SIGINT这个信号设置捕抓函数。此外,在实现的内部还要建立一条管道(pipe),并把这
amoscykl
·
2024-02-07 01:47
Libevent
Libevent
libevent
Libevent源码分析
-----超时event的处理
如何成为超时event:Libevent允许创建一个超时event,使用evtimer_new宏。//event.h文件#defineevtimer_new(b,cb,arg)event_new((b),-1,0,(cb),(arg)) 从宏的实现来看,它一样是用到了一般的event_new,并且不使用任何的文件描述符。从超时event宏的实现来看,无论是evtimer创建的event还是一般ev
amoscykl
·
2024-02-07 01:47
Libevent
Libevent
libevent
Libevent源码分析
-event_base
event_base数据结构初始化event_base相关接口前面介绍了event,本节介绍Reactor的核心结构:event_base,它在event-internal.h中。event_base是整个libevent的核心,它持有所有注册的事件,并负责通知激活的事件。event_base数据结构structevent_base{conststructeventop*evsel;void*ev
KangRoger
·
2024-02-07 01:16
Libevent
libevent
event-base
reactor
《Linux高性能服务器编程》笔记05
github.com/raichen/LinuxServerCodes豆瓣:Linux高性能服务器编程文章目录Linux高性能服务器编程第12章高性能I/O框架库Libevent12.1I/O框架库概述12.2
Libevent
阿正的梦工坊
·
2024-01-23 04:26
Linux
Server
服务器
linux
目录 && 分析计划
1,I/O库的目的,为什么要有IO库而不是使用原始的api,IO网络库解决了什么问题2,Reactor模式3,
libevent源码分析
数据结构与算法4,结合demo分析libevent
cuihang
·
2023-10-27 05:46
libevent源码分析
之源代码文件组织
——libevent源代码文件组织1前言详细分析源代码之前,如果能对其代码文件的基本结构有个大概的认识和分类,对于代码的分析将是大有裨益的。本节内容不多,我想并不是说它不重要!2源代码组织结构Libevent的源代码虽然都在一层文件夹下面,但是其代码分类还是相当清晰的,主要可分为头文件、内部使用的头文件、辅助功能函数、日志、libevent框架、对系统I/O多路复用机制的封装、信号管理、定时事件管
NearXDU
·
2023-09-21 12:45
libevent
libevent
libevent源码分析
1.Libevent有几个显著的亮点libevent封装了底层最高效的网络模型,windows的compIO,linux下的epoll模型,freebsd的kqueue,提供统一的异步调用接口;以事件方式驱动,chrome,memcached都在使用该框架.libevent同时也支持DNS,HTTP协议和RPC调用框架。libevent总是选择对应系统框架下最优的多路复用技术(epoll....)
weixin_34195142
·
2023-09-21 12:45
epoll
操作系统
运维
1、
Libevent源码分析
-----开篇
转载请注明出处:http://blog.csdn.net/luotuo44/article/details/38300779我所分析的Libevent版本是2.0.21版本,是目前最新的稳定版本。看这系列博文中,需要读者有Linux编程的一些基础。因为像POSIX、文件描述符、多线程等等这些概念,我并不会去解释,我默认读者已经熟悉这些概念了。如果读者读过《UNIX环境高级编程》,那就完全没问题了。
陈翔同学
·
2023-09-21 12:43
Libevent源码分析
后端
c语言
libevent源码分析
(三)——信号处理
libevent实现了timer、IO、signal三者的统一,那么timer我们已经分析过了,比较简单的可以融入,那signal怎么统一进去呢?有信号才能有处理,有动作才能有信号,所以我们首先需要知道有动作发生了,那么怎么办呢?之前我们讲过socket通信,可以用来传输信息。socketpairlibevent采用了socketpair。就是用一个socket对来完成消息机制,接到信号后并不立即
闫++
·
2023-03-31 21:54
信号处理
c语言
libevent源码分析
三--signal事件响应
libevent支持io事件,timeout事件,signal事件,这篇文件将分析libevent是如何组织signal事件,以及如何实现signal事件响应的。1.sigmap类似于io事件,event_base有另外一个hash表sigmap用于存储signal事件,hash表使用signalnumber做数组索引,同一个signalnumber的不同事件使用双向链表连接(使用structev
weixin_30758821
·
2023-03-31 20:37
后端
数据结构与算法
[z]Libevent使用例子,从简单到复杂
假如读者还想了解libevent的具体实现,可以阅读《
libevent源码分析
》系统文
didui8202
·
2023-03-15 13:57
libevnet源码分析(2) --内存分配
libevent源码分析
libevent深度剖析1libevent深度剖析2什么都没包装的内存管理默认情况下,libevent使用C库的内存管理函数在堆上分配内存。
梦花火
·
2020-08-23 01:40
libevent
Libevent源码分析
-----连接监听器evconnlistener
使用evconnlistener:基于event和event_base已经可以写一个CS模型了。但是对于服务器端来说,仍然需要用户自行调用socket、bind、listen、accept等步骤。这个过程有点繁琐,为此在2.0.2-alpha版本的Libevent推出了一些对应的封装函数。用户只需初始化structsockaddr_in结构体变量,然后把它作为参数传给函数evconnlistene
一介丶草民
·
2020-08-16 17:24
基本库相关
libevent源码分析
(二) Reactor模式
由于libeventlibeventlibevent本身就是一个ReactorReactorReactor,所以了解ReactorReactorReactor这样一个应用于服务端的开发设计模式很有必要。1.ReactorReactorReactor模式借由WikipediaWikipediaWikipedia上的解释:"Thereactordesignpatternisaneventhandlin
小呀小二笙
·
2020-08-14 07:20
libevent源码分析
Libevent源码分析
-----开篇
转载请注明出处:http://blog.csdn.net/luotuo44/article/details/38300779我所分析的Libevent版本是2.0.21版本,是目前最新的稳定版本。看这系列博文中,需要读者有Linux编程的一些基础。因为像POSIX、文件描述符、多线程等等这些概念,我并不会去解释,我默认读者已经熟悉这些概念了。如果读者读过《UNIX环境高级编程》,那就完全没问题了。
luotuo44
·
2020-08-14 07:26
Libevent源码分析
Libevent源码分析
Libevent源码分析
-----跨平台Reactor接口的实现
转载请注明出处:http://blog.csdn.net/luotuo44/article/details/38458469之前的博文讲了怎么实现线程、锁、内存分配、日志等功能的跨平台。Libevent最重要的跨平台功能还是实现了多路IO接口的跨平台(即Reactor模式)。这使得用户可以在不同的平台使用统一的接口。这篇博文就是来讲解Libevent是怎么实现这一点的。Libevent在实现线程、
luotuo44
·
2020-08-14 07:54
Libevent源码分析
Libevent源码分析
libevent源码分析
---基本使用场景和事件流程
基本使用场景和事件流程当应用程序向libevent注册一个事件后,libevent内部是怎么样进行处理的呢?下面的图就给出了这一基本流程。1)首先应用程序准备并初始化event,设置好事件类型和回调函数;这对应于event_set()和event_base_set()两个函数;2)向libevent添加该事件event。对于定时事件,libevent使用一个小根堆管理,key为超时时间;对于Sig
鱼思故渊
·
2020-07-30 06:43
libevent源码分析
libevent源码分析
Libevent源码分析
-----TAILQ_QUEUE队列
转载请注明出处:http://blog.csdn.net/luotuo44/article/details/38374009Libevent源码中有一个queue.h文件,位于compat/sys目录下。该文件里面定义了5个数据结构,其中TAILQ_QUEUE是使得最广泛的。本文就说一下这个数据结构。队列结构体:TAILQ_QUEUE由下面两个结构体一起配合工作。#defineTAILQ_HEAD
luotuo44
·
2020-07-29 20:00
Libevent源码分析
Libevent源码分析
Libevent源码分析
-----日志和错误处理
转载请注明出处:http://blog.csdn.net/luotuo44/article/details/38317797日志处理:在Libevent的源码中,经常会见到形如event_warn、event_msgx、event_err之类的函数。这通常出现在代码中一些值是不合理时。这些函数就是Libevent的日志函数。它能把这些不合理的情况打印出来,告知用户。定制日志回调函数:Libeven
luotuo44
·
2020-07-29 20:00
Libevent源码分析
Libevent源码分析
Libevent源码分析
——Libevent工作流程
在这里分析一下Libevent基本工作流程,深入理解一下libevent。通常一个最简单的libevent应用流程图如下:首先了解一下structevent结构体。structevent结构体:structevent{ structevent_callbackev_evcallback;//事件回调函数结构体 /*formanagingtimeouts*/ union{
WuYuJun's blog
·
2020-07-29 13:34
linux学习
Libevent源码分析
——队列
在compat/sys/queue.h文件里定义了5种数据结构,分别是单链表、双链表、简单队列、尾队列、环形队列,其中TAILQ_QUEUE尾队列是libevent里使用最多的,libevent中用到的队列其实也是尾队列,所以这里只分析尾队列TAILQ_QUEUE,其他结构都大同小异,TAILQ_QUEUE队列的结构体如下:/**Tailqueuedefinitions.*/#defineTAIL
WuYuJun's blog
·
2020-07-29 13:33
linux学习
Libevent源码分析
——日志系统
Libevent日志系统Libevent在默认情况下,会将日志信息输出到终端上,可以编写日志回调函数,在回调函数中把信息输出到一个文件上。Libevent允许提供日志回调函数接口,只需设置日志回调函数。当有日志时,Libevent库就会调用这个日志回调函数,回调函数的格式如下所示。typedefvoid(*event_log_cb)(intseverity,constchar*msg);voide
WuYuJun's blog
·
2020-07-29 13:02
linux学习
Libevent源码分析
(一)--- 基本数据结构
event结构体libevent是一个基于事件触发的网络库,它的特色之一是把I/O事件,定时器事件和信号量事件统一处理,对上层用户基本是透明的。在libevent内部这三种事件都用event结构体来表示,event是libevent中最基本的数据结构:structevent{TAILQ_ENTRY(event)ev_active_next;TAILQ_ENTRY(event)ev_next;/*f
子曰帅
·
2020-07-12 00:21
libevent源码分析
Libevent源码分析
-----event_io_map哈希表
转载请注明出处:http://blog.csdn.net/luotuo44/article/details/38403241上一篇博客说到了TAILQ_QUEUE队列,它可以把多个event结构体连在一起。是一种归类方式。本文也将讲解一种将event归类、连在一起的结构:哈希结构。哈希结构体:哈希结构由下面几个结构体一起配合工作:structevent_list{structevent*tqh_f
luotuo44
·
2020-07-11 12:14
Libevent源码分析
Libevent源码分析
Libevent
libevent源码分析
之---hash表
libevent-2.022源代码:event-internal.h中原始代码如下:代码编译展开方式:是用gcc的-E选项展开的(一)#ifndef_EVENT_HT_H#define_EVENT_HT_H#defineHT_HEAD(name,type)\structname{\/*Thehashtableitself.*/\structtype**hth_table;\/*Howlongist
happylzs2008
·
2020-07-11 07:08
libevent
Libevent源码分析
—event_base_dispatch()
我们知道libevent是一个Reactor模式的事件驱动的网络库。到目前为止,我们已经看了核心的event和event_base结构体的源码,看了初始化这两个结构体的源码,看了注册event的源码,也将event注册到I/O多路复用监听的事件上了。现在准备工作都做好了,下面就是看运行时的主循环了,在这个主循环中,是如何检测事件、分发事件、调用事件的回调函数的。这一步就是libevent的核心框架
weixin_33795833
·
2020-07-08 15:18
Libevent源码分析
-----配置event_base
转载请注明出处:http://blog.csdn.net/luotuo44/article/details/38443569前面的博文都是讲一些Libevent的一些辅助结构,现在来讲一下关键结构体:event_base。这里作一个提醒,在阅读Libevent源码时,会经常看到backend这个单词。其直译是“后端”。实际上其指的是Libevent内部使用的多路IO复用函数,多路IO复用函数就是s
luotuo44
·
2020-07-07 15:06
Libevent源码分析
Libevent源码分析
Libevent源码分析
-----信号event的处理
转载请注明出处:http://blog.csdn.net/luotuo44/article/details/38538991信号event的工作原理:前面讲解了Libevent如何监听一个IO事件,现在来讲一下Libevent如何监听信号。Libevent对于信号的处理是采用统一事件源的方式。简单地说,就是把信号也转换成IO事件,集成到Libevent中。统一事件源的工作原理如下:假如用户要监听S
luotuo44
·
2020-06-24 09:09
Libevent源码分析
Libevent源码分析
libevent源码分析
(7)--2.1.8--信号事件处理机制分析
一、信号绑定机制简单来说,就是将外部信号转换为内部IO事件来处理。由于信号捕捉函数是全局绑定的,所以没办法像IO事件一样,将IO事件和文件描述符绑定在一起,而libevent又需要将IO事件、信号事件、定时事件都采用事件触发机制来实现,那么对于信号事件来说,就需要一层中间中转来实现,将信号事件在通知event_base时转换成IO事件,具体来说,就是在信号绑定时没办法改变全局绑定的实现,只能在通知
录事参军
·
2020-06-22 17:11
libevent
libevent
libevent
libevent源码分析
(9)--2.1.8--事件注册和删除
一、事件注册-event_add1、将事件添加到等待事件中去,需要注意的是,event_add在event_new或者event_assign之后执行,即添加的事件必须是经过基本初始化过后的事件;2、此处添加的事件包括IO事件、信号事件、定时事件,根据事件申请时设置的事件类型决定添加的流程;3、超时控制包括两种方式:(1)最小堆:时间超时时间存储在最小堆,每次执行超时任务都从最小堆堆顶取任务执行(
录事参军
·
2020-06-22 17:40
libevent
libevent
libevent源码分析
(10)--2.1.8--事件激活
一、event_base_loop此函数主要运行激活事件;它会根据配置中的参数来确定是否需要在执行激活事件过程中中断执行并检查新事件以及检查频率;同时也会根据事件类型执行不同的回调函数,并且决定是否将事件重新添加到队列中;/**Waitforeventstobecomeactive,andruntheircallbacks.Thisisamoreflexibleversionofevent_bas
录事参军
·
2020-06-22 17:40
libevent
libevent
libevent源码分析
(6)--2.1.8--创建和释放libevent句柄event_base的相关函数
一、event_base_new创建默认的event_base***Createandreturnanewevent_basetousewiththerestofLibevent.**@returnanewevent_baseonsuccess,orNULLonfailure.**@seeevent_base_free(),event_base_new_with_config()*///创建并返回
录事参军
·
2020-06-22 17:40
libevent
libevent
libevent源码分析
(8)--2.1.8--事件申请与释放
一、event_new主要用来创建事件结构体,根据监听事件类型,文件描述符,以及回调函数,回调函数参数等创建,可以看成是事件的初始化过程,主要是设定事件的初始状态,此时事件结构体刚刚创建出来还没有添加到event_base的激活或者等待列表中,是孤立存在的,需要调用event_add函数将此事件添加到event_base中。/**Allocateandasssignaneweventstructu
录事参军
·
2020-06-22 17:40
libevent
libevent
libevent
1.网络编程(三):从libevent到事件通知机制发表于2016年1月18日作者auxten—暂无评论http://blog.51reboot.com/2.
Libevent源码分析
-timer和signal
megar
·
2020-02-16 13:05
libevent源码分析
[
libevent源码分析
]event_inithttps://blog.csdn.net/wzsy/article/details/52775641
Libevent源码分析
(chinaunix)http
happylzs2008
·
2019-10-24 08:21
libevent
libevent源码分析
三--signal事件响应
libevent支持io事件,timeout事件,signal事件,这篇文件将分析libevent是如何组织signal事件,以及如何实现signal事件响应的。1.sigmap类似于io事件,event_base有另外一个hash表sigmap用于存储signal事件,hash表使用signalnumber做数组索引,同一个signalnumber的不同事件使用双向链表连接(使用structev
yangzd~
·
2019-08-16 17:00
libevent源码分析
二--timeout事件响应
libevent不仅支持io事件,同时还支持timeout事件与signal事件,这篇文件将分析libevent是如何组织timeout事件以及如何响应timeout事件。1.min_heap首先,event_base中有一个成员structmin_heaptimeheap,这是一个最小堆,用来存储timeout事件的结构之一。先来看一下它的定义:typedefstructmin_heap{str
yangzd~
·
2019-08-16 16:00
libevent源码分析
一--io事件响应
这篇文章将分析libevent如何组织io事件,如何捕捉事件的发生并进行相应的响应。这里不会详细分析event与event_base的细节,仅描述io事件如何存储与如何响应。1.selectlibevent实现io事件的backend实际上使用的是io复用接口,如select,poll,epoll等,这里以最简单的select为例进行说明。首先简单介绍一下select接口:intselect(in
yangzd~
·
2019-08-15 18:00
Libevent源码分析
-----开篇
我所分析的Libevent版本是2.0.21版本,是目前最新的稳定版本。看这系列博文中,需要读者有Linux编程的一些基础。因为像POSIX、文件描述符、多线程等等这些概念,我并不会去解释,我默认读者已经熟悉这些概念了。如果读者读过《UNIX环境高级编程》,那就完全没问题了。因为Libevent是跨平台的,所以它使用了很多它自己定义的通用跨平台类型,比如evutil_socket_t。此外,Lib
amoscykl
·
2018-10-02 20:43
Libevent
Libevent
libevent源码分析
文章目录1libevent简介2工作原理2.1工作流程图2.2Reactor模式框架3源码分析3.1event_init()3.1.1函数定义3.1.2函数说明3.1.3函数源码分析3.2event_set()3.2.1函数定义3.2.2函数说明3.2.3函数源码分析3.3event_base_set()3.3.1函数定义3.3.2函数说明3.3.3函数源码分析3.4event_add()3.4.
CleverCode
·
2018-09-23 18:27
memcached
PHP程序员技术精粹
libevent源码分析
libevent源码分析
作者博客地址:http://blog.csdn.net/luotuo44电子书制作:KelvinYin(yinkangxi#gmail.com)电子书下载:
libevent源码分析
kelvin_yin
·
2018-01-07 09:46
网络编程
libevent源码分析
1 ----evnet相关结构体分析
位于代码event-internal.h中。event_base类似事件的集合,你创建一个事件,必须将该事件指定一个集合。structevent_base{50conststructeventop*evsel;/*evsel和evbase就类比与类和对象之间的关系,evbase是evsel的51一个具体实现,指在这里使用的复用模型*/52void*evbase;53/*这个event_base所关
haoxing990
·
2017-05-19 21:00
Libevent源码分析
-----日志和错误处理
转载请注明出处:http://blog.csdn.net/luotuo44/article/details/38317797日志处理:在Libevent的源码中,经常会见到形如event_warn、event_msgx、event_err之类的函数。这通常出现在代码中一些值是不合理时。这些函数就是Libevent的日志函数。它能把这些不合理的情况打印出来,告知用户。定制日志回调函数:Libeven
confirmwz
·
2017-03-31 11:10
libevent
libevent源码分析
libevent源码分析
转自:http://www.cnblogs.com/hustcat/archive/2010/08/31/1814022.html 这两天没事,看了一下Memcached和libevent
路缘
·
2016-08-05 07:00
Libevent源码分析
(七)--- IOCP
关于iocp模型,网上有很多资料,这里不详细分析,下面这篇文章写的非常详细:完成端口(CompletionPort)详解-手把手教你玩转网络编程系列之三event_base中有一个iocp变量,event_base的初始化函数中会调用event_base_start_iocp开启iocp功能,event_base_start_iocp又会调用event_iocp_port_launch来初始化IO
tbyzs
·
2016-04-02 20:00
Libevent源码分析
(六)--- bufferevent
上一节说过,libevent提供六种bufferevent类型,后面会详细分析其中的两个:bufferevent_sock和bufferevent_async.下面是bufferevent的详细定义:structbufferevent{ /**Eventbaseforwhichthisbuffereventwascreated.*/ structevent_base*ev_base; /**Poi
tbyzs
·
2016-04-01 11:00
Libevent源码分析
(五)--- evbuffer
之前几节分析了libevent底层的结构和运行机制,接下来的几节将会分析Bufferevents,Bufferevents在event的基础上加入了数据缓存逻辑,使得事件和数据结合在一起。libevent的bufferevent有六种类型,分别是:bufferevent_async,bufferevent_filter,bufferevent_openssl,bufferevent_pair,bu
tbyzs
·
2016-03-29 16:00
Libevent源码分析
(四)--- libevent事件机制
之前几个章节都是分析libevent的辅助功能,这一节将要详细分析libevent处理事件的流程和机制,在分析之前先看一下libevent的使用方法,本文也将以libevent的使用方式入手来分析libevent的工作机制。voidcb_func(evutil_socket_tfd,shortwhat,void*arg) { constchar*data=arg; printf("Gotaneve
tbyzs
·
2016-03-18 20:00
上一页
1
2
3
4
下一页
按字母分类:
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
其他