(草草看了下,记录下来,作为以后的参考)
libevent实现了网络IO,timer,signal的事件触发机制. 可以很方便的应用于event-driven服务器中,作为其底层事件处理模块. 比较成功的案
例有 memcache(分布式缓存), PLB(负载均衡器)等.
1. 用户需要完成的回调函数的定义
void (*ev_callback)(int, short, void *arg);
这个回调函数的参数的意思为:
参数1: 表示触发事件的文件句柄,比如一个socket对象.
参数2: 表示事件发生的结果,可能是超时、可读、可写.
参数3: 表示传递给事件的参数.
2. event的结构描述,用到了TAIL QUEUE,见附录
3. event_base 的结构描述
event_base 定义在event-internal.h文件中
附录:
1. TAIL QUEUE是linux c库中的一个数据结构,感谢bachmozart在http://www.javaeye.com/topic/292836上的详细分析
总结一下,这是个队列,分为两部分:head(定位)和queue(存放数据)。head有两个指针,first和last,first指向queue的头,而last则指
向queue最后一个元素的next指针;queue是由很多个entry组成,很像一个双向链表,每个entry有三部分:prev指针,数据,next指针,其中prev指针与head的last指针一样奇怪,它指向前一entry的next指针,即"每个entry的二级指针tqe_prev其存放的是前一个元素的下个元素地址",这样做的好处是我们可以很方便地引用queue的尾巴,也为了插入删除的方便,可以观察TAILQ_INSERT_TAIL宏得知!
如图(引自上面的链接):