libevent的初步认识

来源:互联网 发布:网络水晶头哪个牌子好 编辑:程序博客网 时间:2024/06/03 14:04

最近两天来回路上,简单地过了下《LibEvent参考手册中文版》,了解了libevent的几个概念,打算先记录下来,随着libevent使用增加,后面还会有更一步的描述。
先说整体概念,这是从Libevent官网上摘录的一段描述:
The libevent API provides a mechanism to execute a callback function when a specific event occurs on a file descriptor or after a timeout has been reached. Furthermore, libevent also support callbacks due to signals or regular timeouts.
libevent is meant to replace the event loop found in event driven network servers. An application just needs to call event_dispatch() and then add or remove events dynamically without having to change the event loop.
简单地讲就是libevent将网络服务器常用的event loop 事件驱动模型提取成了一个公共的库,并提供了可移植性。从使用者的角度上看,libevent提供了一个事件循环(event loop),一个缓冲实现evbuffer,一个带缓冲的非阻塞IO框架(bufferevent),一个连接监听器(evconnlistener,初步认为是一个tcp server)一个dns客户端(evdns)。

这里面有个基本的框架就是事件循环——像大多数系统一样,总需要一个核心的数据结构去保存信息,事件循环的核心数据结构就是event_base。event_base就像一个文件句柄一样,在各个函数之间传递来,传递去。
用代码来描述libevent提供的事件循环,大概是这个样子的:

use_libevent(){    // 创建event_base    base = event_base_new();    // 创建需要关注的event,读事件    struct event* preadevent = event_new(base,EV_READ,callback);    // 绑定事件    event_add(preadevent);    // 开始循环,触发事件后便调用事件对应的callback    event_base_dispatch(base);}
0 0