文档章节

libevent 介绍

lake_r
 lake_r
发布于 2016/04/19 09:32
字数 1246
阅读 207
收藏 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指正

© 著作权归作者所有

共有 人打赏支持
lake_r
粉丝 82
博文 155
码字总数 72374
作品 0
朝阳
后端工程师
私信 提问
libevent源码深度剖析

作者:http://blog.csdn.net/sparkliang/article/category/660506 libevent源码深度剖析十三——libevent信号处理注意点 libevent源码深度剖析十三——libevent信号处理注意点前面讲到了lib...

晨曦之光
2012/03/09
2.6K
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
166
0
PHP libevent 使用总结

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

TYi
2016/05/19
542
0
Linux操作系统下安装Memcache的方法介绍

1.分别把memcached和libevent下载回来,放到 /tmp 目录下: # cd /tmp # wget http://www.danga.com/memcached/dist/memcached-1.2.0.tar.gz # wget http://www.monkey.org/~provos/libeven......

JavaGG
2009/05/24
182
0

没有更多内容

加载失败,请刷新页面

加载更多

进程管理利器Supervisor--centos7下安装与卸载

目录 概述 环境准备 检查python环境 在线安装 配置Supervisor 启动并验证 概述 Supervisor的安装可以有在线安装和离线安装两种方式。安装方式取决于服务器是否联网,联网的话可采用在线安装,...

java_龙
16分钟前
2
0
spring系列汇总

spring spring-基于可扩展Schema的特性自定义标签 springmvc-同一个访问资源,多种视图解析方式 spring cache 配置使用aspectj模式织入 基于注解的spring缓存,轻松无侵入解决cache问题 spri...

细肉云吞
17分钟前
2
0
vsftpd搭建ftp

12月10日任务 14.4 exportfs命令 14.5 NFS客户端问题 15.1 FTP介绍 15.2/15.3 使用vsftpd搭建ftp exportfs命令 在nfs运行后的一段时间内,如果需要添加共享目录,这时需要修改exports文件,并...

robertt15
19分钟前
2
0
numpy常用操作

水平合并数组 import numpy as npa = [1,2,3]b = [4,5,6]np.hstack((a,b))# array([1, 2, 3, 4, 5, 6])c = [a,['a','b','c']]d = [b,['d','e','f']]np.hstack((c,d))#array([['1'......

datadev_sh
35分钟前
5
0
四种检测异常值的常用技术简述

摘要: 本文介绍了异常值检测的常见四种方法,分别为Numeric Outlier、Z-Score、DBSCAN以及Isolation Forest 在训练机器学习算法或应用统计技术时,错误值或异常值可能是一个严重的问题,它们...

阿里云官方博客
38分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部