文档章节

libevent 介绍

mjrao
 mjrao
发布于 2016/04/19 09:32
字数 1246
阅读 173
收藏 2
点赞 1
评论 0

# 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 ⋅ 0

libevent源码深度剖析

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

晨曦之光 ⋅ 2012/03/09 ⋅ 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 ⋅ 0

PHP libevent 使用总结

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

TYi ⋅ 2016/05/19 ⋅ 0

Ubuntu 安装gevent

Gevent是一个基于greenlet的Python的并发框架,以赖于greenlet和libevent库,因此安装Gevent前,首先需要安装greenlet和libevent。 libevent的安装,这里就不介绍了,网上的安装教程一大箩,...

jackliu8722 ⋅ 2012/07/16 ⋅ 0

repcached实现memcached主从复制

1.repcached介绍 使用repcached可以实现memcached的复制功能: 它是一个单master单slave的方案。但是它的master/slave都是可读写的,而且可以相互同步。如果master down掉,slave侦测到连接断...

wcyong ⋅ 2015/09/26 ⋅ 0

一个对异步IO的小小的介绍 (3)

一个对异步IO的小小的介绍 (1) 一个对异步IO的小小的介绍 (2) 一个对异步IO的小小的介绍 (4) 这里是另一个ROT13 server的异步实现。这次,它使用libevent 2 来替代select。注意fdsets已经不再...

星罗棋布 ⋅ 2014/03/03 ⋅ 0

Java程序使用memcached配置与示例

Memcached作为一款很强大的分布式缓存,经常被用到大型的互联网应用中,比如新浪微博等都采用memcached做缓存。 Memcached也经常和MySQL组合做数据缓存。 具体的介绍请参考官方网站:www.mem...

村长大神 ⋅ 2015/02/11 ⋅ 0

memcached简介与安装【网络摘抄】

memcached是什么? memcached是以LiveJournal 旗下Danga Interactive公司的Brad Fitzpatric 为首开发的一款软件。现在已成为mixi 、 hatena、 Facebook 、 Vox 、LiveJournal等众多服务中提高...

yuanzhitang ⋅ 2016/09/06 ⋅ 0

memcached安装步骤

一:资源 memcached 官方网站: memcached版本: 依赖 libevent: libevent下载地址: 二:安装 libevent-1.4.12 解压: 编译安装,可以选择默认安装,也可以指定安装路径,默认安装路径为:...

燃犀 ⋅ 01/29 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

mysql5.7系列修改root默认密码

操作系统为centos7 64 1、修改 /etc/my.cnf,在 [mysqld] 小节下添加一行:skip-grant-tables=1 这一行配置让 mysqld 启动时不对密码进行验证 2、重启 mysqld 服务:systemctl restart mysql...

sskill ⋅ 8分钟前 ⋅ 0

Intellij IDEA神器常用技巧六-Debug详解

在调试代码的时候,你的项目得debug模式启动,也就是点那个绿色的甲虫启动服务器,然后,就可以在代码里面断点调试啦。下面不要在意,这个快捷键具体是啥,因为,这个keymap是可以自己配置的...

Mkeeper ⋅ 12分钟前 ⋅ 0

zip压缩工具、tar打包、打包并压缩

zip 支持压缩目录 1.在/tmp/目录下创建目录(study_zip)及文件 root@yolks1 study_zip]# !treetree 11└── 2 └── 3 └── test_zip.txt2 directories, 1 file 2.yum...

蛋黄Yolks ⋅ 15分钟前 ⋅ 0

聊聊HystrixThreadPool

序 本文主要研究一下HystrixThreadPool HystrixThreadPool hystrix-core-1.5.12-sources.jar!/com/netflix/hystrix/HystrixThreadPool.java /** * ThreadPool used to executed {@link Hys......

go4it ⋅ 33分钟前 ⋅ 0

容器之上传镜像到Docker hub

Docker hub在国内可以访问,首先要创建一个账号,这个后面会用到,我是用126邮箱注册的。 1. docker login List-1 Username不能使用你注册的邮箱,要用使用注册时用的username;要输入密码 ...

汉斯-冯-拉特 ⋅ 40分钟前 ⋅ 0

SpringBoot简单使用ehcache

1,SpringBoot版本 2.0.3.RELEASE ①,pom.xml <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.3.RELE......

暗中观察 ⋅ 41分钟前 ⋅ 0

监控各项服务

比如有三个服务, 为了减少故障时间,增加监控任务,使用linux的 crontab 实现. 步骤: 1,每个服务写一个ping接口 监控如下内容: 1,HouseServer 是否正常运行,所以需要增加一个ping的接口 ; http...

黄威 ⋅ 44分钟前 ⋅ 0

Spring源码解析(八)——实例创建(下)

前言 来到实例创建的最后一节,前面已经将一个实例通过不同方式(工厂方法、构造器注入、默认构造器)给创建出来了,下面我们要对创建出来的实例进行一些“加工”处理。 源码解读 回顾下之前...

MarvelCode ⋅ 44分钟前 ⋅ 0

nodejs __proto__跟prototype

前言 nodejs中完全没有class的这个概念,这点跟PHP,JAVA等面向对象的语言很不一样,没有class跟object的区分,那么nodejs是怎么样实现继承的呢? 对象 对象是由属性跟方法组成的一个东西,就...

Ai5tbb ⋅ 50分钟前 ⋅ 0

Ubuntu16.04 PHP7.0 不能用MYSQLi方式连接MySQL5.7数据库

Q: Ubuntu16.04 PHP7.0 不能用MYSQLi方式连接MySQL5.7数据库 A: 执行以下2条命令解决: apt-get install php-mysql service apache2 restart php -m 执行后会多以下4个模块: mysqli mysqlnd...

SamXIAO ⋅ 53分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部