
Libevent源代码分析
文章平均质量分 90
有时需要偏执狂
一定要搞懂,千万不要心存侥幸,否则一些问题会让你痛苦不堪(源码面前,了无秘密)。
拥有一某三分地不容易,贵在坚持。
展开
-
Libevent之定时器事件管理
事件如何管理先来对应的demo#include <event.h>struct event ev;struct timeval tv;void time_cb(int fd, short event, void *argc){ printf("timer wakeup\n"); event_add(&ev, &tv); // reschedu...原创 2018-03-07 23:56:14 · 924 阅读 · 0 评论 -
Libevent之evconnlistener详解
#evconnlistener的简介基于event和event_base已经可以写一个CS模型了。但是对于服务器端来说,仍然需要用户自行调用socket、bind、listen、accept等步骤。这个过程有点繁琐,并且一些细节可能考虑不全,为此Libevent推出了一些对应的封装函数,简化了整个监听的流程,用户仅仅需要在对应回调函数里面处理已完成连接的套接字即可。1、省去了用户手动注册事件的过程。2、省去了用户去验证系统函数返回是否成功的问题。3、帮助用户完成了处理非阻塞套接字accpet的麻烦。原创 2018-04-24 17:25:07 · 8867 阅读 · 2 评论 -
libevent编程疑难解答
转载请注明出处:http://blog.youkuaiyun.com/luotuo44/article/details/39547391 前段时间阅读了libevent的源码。读毕,之前使用libevent时的一些疑问都已经豁然开朗了。对于libevent源码的分析,可以移步http://blog.youkuaiyun.com/luotuo44/article/category/2435521查看。如果是li转载 2018-05-01 12:22:44 · 414 阅读 · 0 评论 -
Libevent之evbuffer详解
介绍对于任何网络库(模块)而言,一个缓冲模块都是必不可少的。缓冲模块主要用于缓冲从网络接收到的数据,以及用户提交的数据(用于发送)。很多时候,我们还需要将网络模块层(非TCP层)的这些缓冲数据拷贝到用户层,而这些内存拷贝都会消耗时间。为此Libevent提供了evbuffer用于处理缓冲网络IO的缓冲部分,为后续bufferevent的工作做准备。evbuffer结构体缓冲区由evbu...转载 2018-04-23 20:52:28 · 6138 阅读 · 0 评论 -
Libevent之struct event和struct event_base及其对应操作详细解释
分析一个开源库,首先应该关注其中重要的结构体,因为结构体往往是将一个事物抽象出来了。例如struct event结构体就是表示事件这一抽象个体。里面包含了事件应该有的所有操作。定义不同事件实质就是填充结构体里面对应的字段而已。结构体里面大量含有指针变量,那么可以说明这个指针变量一定指向堆中的某一段内存。存在着大量的动态分配内存操作。作者真的对内存了如指掌了,还是贯彻了一个道理,一切皆内存,全部都是...原创 2018-03-04 16:28:02 · 2528 阅读 · 0 评论 -
Libevent之Tail_Queue及Min_Heap
在Libevent中,用到了双向链表和小根堆,双向链表直接使用的linux内核里面的queue.h。对于信号事件、IO事件以及就绪事件全部都是通过双向链表连接在一起,对于定时器事件则通过小根堆连接在一起,所以理解着两种数据结构是分析后续代码的关键。1、tail queue下面头文件定义了双向链表的关键性操作。双向链表的实现和平常自己实现的不太一样,一般实现就是一个节点里面除了存放自定义...原创 2018-03-03 15:07:37 · 729 阅读 · 2 评论 -
Libevent内存分配功能
Libevent内存管理相当简单。可以支持用于自定义的内存分配策略,这个时候就是用户自己写对应的内存分配策略例如可以写个简单的内存池,然后注册回调函数,供内存分配调用;也可以通过系统自带的malloc、realloc、free分配内存。可以通过是否定义_EVENT_DISABLE_MM_REPLACEMENT宏选择内存分配的策略。如果要定制自己的内存分配函数,就得在一开始配置编译Libevent库...原创 2018-03-01 20:47:46 · 883 阅读 · 0 评论 -
Libevent通过va_list实现日志功能
Libevent提供一个记录错误和警告信息的日志功能。默认是直接将上述信息输出到标准错误,同时也可以通过回调函数提供自己的日志函数覆盖默认的功能。1、C语言实现可变参数<stdarg.h>中包含一组宏定义,它们对如何遍历参数进行了定义。依据下面的几个函数,可以写出高效率的日志功能。va_list//宏定义,用于声明变量,该变量将依次引用各参数。void va_...原创 2018-03-01 20:09:32 · 829 阅读 · 1 评论 -
Libevent初探及其设计模式
libevent介绍Libevent是一个用C语言编写的、轻量级的开源高性能事件通知库,主要有以下几个亮点: 1、事件驱动( event-driven),高性能;轻量级,专注于网络,不如 ACE 那么臃肿庞大; 2、源代码相当精炼、易读;跨平台,支持 Windows、 Linux、 *BSD 和 Mac Os; 3、支持多种 I/O 多路复用技术, epoll、 poll、 dev/po...原创 2018-03-01 14:45:24 · 1053 阅读 · 0 评论 -
ubuntu下安装Libevent,并通过QT测试
1、官网下载最新的Libevent-2.022 2、解压安装包,并进入文件包tar -zxvf libevent-2.0.22-stable.tzr.gz cd libevent-2.0.22-stable 3、配置编译并安装1、./configure --prefix=/usr #如果前面有CFLAGS=-DUSE_DEBUG则编译成bug版本。2、make ...原创 2018-03-01 10:12:34 · 1429 阅读 · 0 评论 -
Libevent之信号事件管理
1、原理性介绍:1、Linux操作系统,对于信号的处理,都是调用先前注册给系统的回调函数,例如通过sigaction(evsignal, &sa, sig->sh_old[evsignal])注册回调了sa里面的回调函数。当对应的信号到来时候,将调用相应的回调函数。2、Libevent为了将信号事件和IO事件统一起来,即对于信号的处理也通过epoll可以检测到。因此Libev...原创 2018-03-07 23:59:52 · 2032 阅读 · 0 评论 -
Libevent之 bufferevent 及 bufferevent_sock 详解
通常已连接的套接字除了相应事件之外,应用还希望做一定的数据缓冲。决定要向连接写入一些数据,把数据放入到缓冲区中。等待连接可以写入。写入尽量多的数据。记住写入了多少数据,如果还有更多数据要写入,等待连接再次可以写入。这种缓冲IO模式很通用,libevent为此提供了一种通用机制即。由一个底层的传输端口(如已连接套接字)、一个读取缓冲区和一个写入缓冲区组成。与通常的事件在底层传输端口已经就绪,可以读取或者写入的时候执行回调不同的是,在读取或者写入了足够量的数据之后再调用用户提供的回调。用户通过。原创 2018-04-24 17:36:12 · 6056 阅读 · 1 评论