libevent的做用或者说是有哪些功能

 1. 介绍编程

    libevent是一个用来开发可扩展的网络服务器的事件通知函数库。当一个文件描述符上的特定事件发生或是一个超时时间到达后,libevent API提供一种执行回调函数的机制。并且,libevent还支持基于信号或按期超时的回调功能。服务器

    libevent旨在替换在原有事件驱动网络服务器事件循环而设计的。应用程序仅仅须要调用event_dispatch(),而后动态地添加或是移除事件就能够了,而不须要改变原有的事件循环。网络

    目前,libevent支持/dev/poll,kqueue(2),select(2),poll(2)和epoll(4)等高并发网络编程模型。而它对实时信号的支持正处于实验性阶段。内部的事件处理机制是彻底独立于暴露出来的API的,而且新功能的加入并不须要从新设计应用程序,而是仅仅须要作一个简单的libevent更新便可。所以,lievent容许可移植性的应用程序开发,而且可以提供适合特定操做系统的最具可扩展性的事件通知机制。libevent同时也可用于多线程编程环境,更多说明请看Steven Grimm的说明。libevent能够在Linux,*BSD,Mac OS X,Solaris和Windows系统上编译。数据结构

    2. 标准用法多线程

    每个使用libevent的程序,都须要包含<event.h>头文件,而且须要传递-levent标志给链接器linker。在使用任何库函数以前,须要先调用event_init()或者event_base_new()函数制执行一次libevent库的初始化。并发

    3. 事件通知框架

    对于每个你想监视的文件描述符,你必须声明一个事件结构而且调用event_set()去初始化结构中的成员。为了激活通知,你须要经过调用event_add()将该结构添加到监视事件列表。只要是该事件存活,那么就须要保持该已allocated的事件结构,所以该事件结构须要在堆(heap)上申请。最后,须要调用event_dispatch()函数循环和调度事件。异步

    4. I/O缓冲区socket

    libevent提供了一个按期回调事件顶层的抽象。该抽象被称为缓冲事件(buffered event)。缓冲事件提供自动地填充和流掉(drained)的输入和输出缓冲区。缓冲时间的用户再也不须要直接操做I/O,取而待之的是仅仅从输入缓冲区读,向输出缓冲区写就能够了。函数

    一旦经过bufferevent_new()进行了初始化,bufferevent结构就能够经过bufferevent_enable()和bufferevent_disable()重复地使用了。做为替代,对一个套接口的读写须要经过调用bufferevent_read()和bufferevent_write()函数来完成。

    当因为读事件而激活bufferevent时,那么后续将会自动回调读函数从该文件描述符读取数据。写函数将会被回调,不管什么时候这个输出缓冲区空间被耗尽到低于写的下水位(low watemark),一般该值默认为0。

    5. 定时器

    libevent经过建立一个定时器来参与到一个通过必定超时时间后的回调事件中。evtimer_set()函数将准备(分配)一个事件结构被用于做为一个定时器。为了激活定时器,须要调用evtimer_add()函数。相反,须要调用evtimer_del()函数。

    6. 超时

    除了简单的定时器,libevent能够为文件描述符指定一个超时事件,用于触发通过一段时间后而没有被激活的文件描述符执行相应的操做。timeout_set()函数能够为一个超时时间初始化一个事件结构。一旦被初始化成功,那么这个事件必须经过timeout_add()函数激活。为了取消一个超时事件,能够调用timeout_del()函数。

    7. 异步DNS解析

    libevent提供了一个异步DNS解析器,可用于代替标准的DNS解析器。这些函数能够经过在程序中包含<evdns.h>头文件而将其导入。在使用任何解析器函数以前,你必须调用evdns_init()函数初始化函数库。为转化一个域名到IP地址,能够调用evdns_resolve_ipv4()函数。为了执行一个反响查询,你能够调用evdns_resolve_reverse()函数。全部的这些函数,在查找时都会使用回调的方式而避免阻塞的发生。

    8. 事件驱动的HTTP服务器

    libevent提供了一个简单的能够嵌入到你的程序中的并能处理HTTP请求的事件驱动HTTP服务器。

    为了使用这种能力,你应该在你的程序中包含<evhttp.h>头文件。你能够经过调用evhttp_new()函数来建立一个服务器。经过evhttp_bind_socket()函数添加用于监听的地址和端口。而后,你能够注册一个或多个对到来请求的处理句柄。对于每个URI能够经过evhttp_set_cb()函数指定一个回调。一般,一个回调函数也能够经过evhttp_set_gencb()函数完成注册;若是没有其余的回调已经被注册获得该URI,那么这个回调将会与其关联。

    9. RPC服务器和客户端框架

    libevent提供了一个建立RPC服务器和客户端的编程框架。它将托管全部的编组和解组的数据结构

相关文章
相关标签/搜索