文档章节

libevent 介绍

mjrao
 mjrao
发布于 2016/04/19 09:32
字数 1246
阅读 180
收藏 2

# libevent 2.0

介绍

libevent是一个用于开发可扩展性网络服务器的基于事件驱动模型的网络库. libevent具有几个显著亮点:

  • 事件驱动,高性能
  • 轻量级,专注于网络
  • 跨平台,支持Windows, Linux, Mac OS等
  • 支持多种I/O多路复用技术,epoll, poll, dev/poll, select和kqueue等
  • 支持I/O,定时器和信号等事件
  • 注册事件优先级

libevent是为了取代在事件驱动的网络服务器的事件循环.应用程序只需要调用event_dispatch()然后动态的添加和删除事件而不需要改变事件循环. libevent已经被广泛的应用,作为底层网络库;比如Memcached, Vomit, NetChat,Chromium等

标准用法

每一个使用libevent的应用程序必须包含<event2/event.h>头文件,并通过链接器连接-levent.(相反的如果你只想链接主要的event或者基础的I/O缓冲区管理代码,不想链接其他的代码协议,可以使用-levent_code)

库设置

在你调用libevent库中其他函数之前,你首先需要设置库。如果你想在多线程应用程序中使用libevent,你需要初始化线程支持,通过使用evthread_use_pthreads()或者evthread_use_windows_threads().你可以查看<event2/thread.h>了解更多的信息. 另一点,你可以使用event_set_mem_functions取代libevent的内存管理,使用event_enable_debug_mode()函数打开调试模式.

创建一个event base

接下来,你需要创建一个event_base结构,使用event_base_new()或者event_base_new_with_config().event_base的责任是保持跟踪哪一个event时间是即将发生的(换句话说,观察哪一个会成为活动的)和哪些事件是活动的。每一个事件都和单个evnet_base相关.

事件通知

你想监视每一个文件描述符,你必须创建一个event结构通过event_new()函数.(你也可以调用event_assign()函数声明一个event结构去初始化结构里面的成员.)启动通知,你要通过event_add()添加结构加入到监控事件列表.事件列表必须一直保留在活动的情况下,并且它应该是在堆上分配.

调度事件

最后,你要调用event_dispatch()去循环调度事件.你也可以使用event_base_loop()达到更精细的控制。

目前,只有一个线程可以被一个给定的event_base调度一次。如果你想同时运行事件在多线程中,你也可以有一个单一的event_base,把那些事件添加到一个工作队列,或者你可以创建多个event_base 对象.

I/O缓冲区

libevent在上层提供一个定期事件回调的抽象,这个抽象被称作缓冲事件.一个缓冲事件提供输入和输出缓冲区,能够自动的填充和取出.一个使用的缓冲事件用户不再直接的进行I/O操作,而是通过从输入缓冲区中读取,写入到输出缓冲区.

一旦初始化通过bufferevent_socket_new(),bufferevent结构的bufferevent_enable()bufferevent_disable()会被反复使用.通过调用bufferevent_read()bufferevent_write()而取代直接的读写socket.

当被允许读时,bufferevent将试图读取文件描述符和调用读的回调函数.写回调被执行时,输出缓冲区写到临界时,将默认返回0.

查看<event2/bufferevent*.h>获得更多的信息

定时器

libevent 可以创建定时器来唤醒一个已经经过一定时间已经过期的回调(callback).evtime_new()函数返回一个事件结构作为一个定时器.调用evtime_add()来激活一个定时器.定时器通过调用evtimer_del()停用定时器.

异步DNS解析

libevent剔红一个异步DNS解析器,它可以取代标准的DNS解析器功能。

更详细的查看<event2/dns.h>

事件驱动的HTTP服务器

libevent提供一个非常简单的事件驱动HTTP服务,可以嵌入你的程序用来提供HTTP服务请求.

使用这些特性,你需要包含<event2/http.h>头文件.查看这个头文件了解更多的信息。

一个RPC服务端和客户端框架

libevent 提供一个框架来创建服务端和客户端.它负责封装和拆解所有的数据结构。

API 接口

可以点击下面的链接,浏览完整的libevebt API文档

event2/event.h libevent 的主要头文件

event2/thread.h多线程程序使用的函数

event2/buffer.hevent2/bufferevent.h缓冲区管理和网络读写

event2/util.h实用的功能的无阻塞网络代码

event2/dns.h异步DNS解析

event2/http.h一个基于libevent的嵌入HTTP 服务器

event2/rpc.h一个创建RPC服务端和客户端的框架


*部分原文链接地址*如有描述翻译问题,欢迎纠正,并pull request或邮件mjrao@foxmail.com

github原文,翻译如有出处,欢迎pull request指正

© 著作权归作者所有

共有 人打赏支持
mjrao
粉丝 82
博文 152
码字总数 71971
作品 0
朝阳
后端工程师
libevent源码深度剖析

作者:http://blog.csdn.net/sparkliang/article/category/660506 libevent源码深度剖析十三——libevent信号处理注意点 2010-02-11 20:00阅读(1669)评论(6) libevent源码深度剖析PDF 2010-...

晨曦之光
2012/03/09
2.4K
0
CentOS 6.x 安装 Memcached

一、Memcached 介绍 Free & open source, high-performance, distributed memory object caching system, generic in nature, but intended for use in speeding up dynamic web application......

雨林_a1d6
07/25
0
0
libevent源码深度剖析

原文地址:http://blog.csdn.net/sparkliang/article/details/4957667 libevent源码深度剖析一 ——序幕 张亮 1 前言 Libevent是一个轻量级的开源高性能网络库,使用者众多,研究者更甚,相关...

晨曦之光
2012/03/09
145
0
Linux操作系统下安装Memcache的方法介绍

cd /tmp wget http://www.danga.com/memcached/dist/memcached-1.2.0.tar.gz wget http://www.monkey.org/~provos/libevent-1.2.tar.gz 2.先安装libevent: tar zxvf libevent-1.2.tar.gz c......

JavaGG
2009/05/24
174
0
PHP libevent 使用总结

在根据网上很多资料介绍 libevent 如何使用或者代码分析;不过,大多数都是C 方面一些底层介绍。 在 php 层面上介绍相关应用相对很少,不知道是否在 php 使用 libevent 组件的本身就比较少....

TYi
2016/05/19
542
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

InvalidKeyException: Illegal key size

Caused by: java.lang.RuntimeException: java.security.InvalidKeyException: Illegal key size 解决方案:去官方下载JCE无限制权限策略文件。 jdk 5: http://www.oracle.com/technetwork/j......

自由的开源
17分钟前
0
0
JAVA秒杀实现以及优化原理

秒杀与其他业务最大的区别在于:秒杀的瞬间, (1)系统的并发量会非常的大 (2)并发量大的同时,网络的流量也会瞬间变大。 关于(2),最常用的办法就是做页面静态化,也就是常说的前后端分...

小贱是个程序员
20分钟前
1
0
Spring Aop之Advisor解析

在上文Spring Aop之Target Source详解中,我们讲解了Spring是如何通过封装Target Source来达到对最终获取的目标bean进行封装的目的。其中我们讲解到,Spring Aop对目标bean进行代理是通过Ann...

爱宝贝丶
23分钟前
0
0
Java高级工程师面试阿里,阿里云,天猫,菜鸟,涉及到的知识点

前言: 分享 Java高级工程师面试阿里,阿里云,天猫,菜鸟,涉及到的知识点,文章有点长,但比较全面,阅读时间15分钟左右,干货满满。 一、HashMap的那些事 1.1、HashMap的实现原理 1.1.1、...

Java大蜗牛
48分钟前
2
0
nginx模块学习五 expires 浏览器缓存

缓存原理 语法 Syntax: expires [modified] time;expires epoch | max | off;Default: expires off;Context: http,server,location,if in location 例/etc/nginx/conf.d/default.con......

Romanceling
58分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部