
libevent源码分析
子曰帅
源码之前 了无秘密
展开
-
Libevent源码分析(三)--- IO多路复用模型
eventop 和zeromq一样,libevevnt支持多种 I/O多路复用技术比如epoll、poll、dev/poll、select 和kqueue 等 ,为了统一封装这些模型,libevent定义了eventop结构体: /** Structure to define the backend of a given event_base. */ struct eventop {原创 2016-03-17 12:17:06 · 1495 阅读 · 0 评论 -
Libevent源码分析(一)--- 基本数据结构
event结构体libevent是一个基于事件触发的网络库,它的特色之一是把I/O事件,定时器事件和信号量事件统一处理,对上层用户基本是透明的。在libevent内部这三种事件都用event结构体来表示,event是libevent中最基本的数据结构:struct event { TAILQ_ENTRY(event) ev_active_next; TAILQ_ENTRY(even原创 2016-03-12 14:04:45 · 3160 阅读 · 0 评论 -
Libevent源码分析(四)--- libevent事件机制
之前几个章节都是分析libevent的辅助功能,这一节将要详细分析libevent处理事件的流程和机制,在分析之前先看一下libevent的使用方法,本文也将以libevent的使用方式入手来分析libevent的工作机制。void cb_func(evutil_socket_t fd, short what, void *arg) { const char *data = arg;原创 2016-03-18 20:22:43 · 1773 阅读 · 0 评论 -
Libevent源码分析(二)--- 时间管理
时间获取libevent使用两种方式获取时间,首选是通过clock_gettime的CLOCK_MONOTONIC参数获取绝对时间,这个时间是递增的,不受系统时间影响,比较准确。其次是使用gettimeofday或者_ftime,这两种方式都是获取系统时间,下面是相关代码:static int gettime(struct event_base *base, struct timeval *tp)原创 2016-03-14 11:10:55 · 978 阅读 · 0 评论 -
Libevent源码分析(六)--- bufferevent
上一节说过,libevent提供六中bufferevent类型,后面会详细分析其中的两个,bufferevent_sock和bufferevent_async,后者是采用iocp实现的。每一个bufferevent包含两个evbuffer作为读写缓存。下面是bufferevent的详细定义: struct bufferevent { /** Event base for which th原创 2016-04-01 11:48:23 · 2613 阅读 · 0 评论 -
Libevent源码分析(七)--- IOCP
IOCP模型 关于iocp模型,网上有很多资料,这里不详细分析,下面这篇文章写的就非常详细: 完成端口(CompletionPort)详解 - 手把手教你玩转网络编程系列之三原创 2016-04-02 20:00:02 · 3916 阅读 · 0 评论 -
Libevent源码分析(零)--- 前言
libevent是一个基于事件模型的网络库,它以高性能著称,使用也非常广泛,比如熟知的memcache就是使用libevent作为底层网络库的。笔者目前游戏服务器同样使用了libevent作为网关服务器和客户端交互的网络库,而服务器之间的通讯则使用了zeromq。libevent的介绍网上比较多,基本有以下几个特点:事件驱动,高性能 高性能是libevent最重要的特性,后原创 2016-03-10 14:43:24 · 793 阅读 · 0 评论 -
Libevent源码分析(五)--- evbuffer的基本操作
之前几节分析了libevent底层的结构和运行机制,接下来的几节将会分析Bufferevents,Bufferevents在event的基础上加入了数据缓存逻辑,使得事件和数据结合在一起。libevent的bufferevent有六种类型,分别是:bufferevent_async,bufferevent_filter,bufferevent_openssl,bufferevent_pair,bu原创 2016-03-29 16:25:58 · 2384 阅读 · 0 评论