Libevent:1前言
一:libevent概述:
libevent是一个用来编写快速、可移植、非阻塞IO程序的库,它的设计目标是:可移植性、高效、可扩展性、便捷。
libevent包含下列组件:
evutil:对不同平台下的网络实现的差异进行抽象;
event、event_base:libevent的核心。为各种平台特定的、基于事件的非阻塞IO后端提供抽象API,让程序可以知道套接字何时已经准备好读或写,并且处理基本的超时功能,检测OS信号。
bufferevent:为libevent基于事件的核心提供更方便的封装。可以使你的程序请求缓存的读和写,让你知道何时真正的发生IO,而不是在sockets准备好时通知你。(bufferevent接口拥有多个后端,这样可以有效的利用系统提供的更高速的非阻塞IO方式,比如windows的IOCPAPI。)
evbuffer:在bufferevent层之下实现了缓冲功能,并且提供了方便有效的访问函数。
evhttp:一个简单的HTTP客户端/服务器实现。
evdns:一个简单的DNS客户端/服务器实现。
evrpc:一个简单的RPC实现。
二:库
当构件libevent时,默认情况下,它会安装下面的库:
libevent_core:包含所有核心的事件和缓存功能。该库包含了所有的event_base, evbuffer, bufferevent和其他功能函数。
libevent_extra:该库定义了特定协议的功能,比如HTTP,DNS和RPC。
libevent:该库只因历史原因而存在;他包含了libevent_core 和libevent_extra的内容。该库不应该在使用;它将会在未来的libevent删除。
下面的库只会在某些平台上安装:
libevent_pthreads:该库基于可移植线程库pthreads,增加了线程和锁的实现机制。它独立于libevent_core,因此,除非你要在多线程中使用libevent,否则不需要连接pthreads库。
libevent_openssl:这个库为使用bufferevent和OpenSSL进行加密的通信提供支持。它独立于libevent_core,因此,除非你确实需要加密通信,否则不需要连接OpenSSL库。
三:头文件
目前,所有的libevent头文件都安装在event2目录下。头文件分为三类:
API头文件:定义libevent的共用接口。这些头文件没有特定后缀。
兼容头文件:包含那些不推荐使用的函数的定义。除非使用较老版本的libevent,否则不需要包含这种头文件。
结构头文件:这类头文件以相对不稳定的布局定义各种结构体。这些结构体中的一些是为了提供快速访问而暴露;一些是因为历史原因而暴露。直接依赖这类头文件中的任何结构体都会破坏程序对其他版本libevent的二进制兼容性,有时候是以非常难以调试的方式出现。这类头文件具有后缀“_struct.h”。
(还存在不在event2目录中的较老版本libevent的头文件,请参考下节:使用老版本libevent)
四:使用老版本Libevent
Libevent 2.0已经经过修订,使其更加合理和健壮,如果可能的话,应该使用Libevent2.0的API。但是某些时候,你可能不得不使用老版本的API。
老版本的Libevent的头文件较少,而且没有安装在event2目录下:
|
OLD HEADER… |
…REPLACED BY CURRENT HEADERS |
|
event.h |
event2/event*.h, event2/buffer*.h event2/bufferevent*.h event2/tag*.h |
|
evdns.h |
event2/dns*.h |
|
evhttp.h |
event2/http*.h |
|
evrpc.h |
event2/rpc*.h |
|
evutil.h |
event2/util*.h |
在2.0以及以后版本的libevent中,老的头文件仍然会作为新头文件的封装而存在。
其他关于使用较老版本的提示:
1.4版之前只有一个库libevent,它包含现在分散到libevent_core和libevent_extra中的所有功能。
2.0版之前不支持锁:只有确定不同时在多个线程中使用同一个结构体时,libevent才是线程安全的。
原文:http://www.wangafu.net/~nickm/libevent-book/Ref0_meta.html
参考:http://blog.csdn.net/laoyi_grace/article/details/6534202
Libevent:1前言的更多相关文章
- libevent源码深度剖析
原文地址: http://blog.csdn.net/sparkliang/article/details/4957667 第一章 1,前言 Libevent是一个轻量级的开源高性能网络库,使用者众多 ...
- 轻量级网络库libevent概况
Libevent is a library for writing fast portable nonblocking IO. libevent是一个为编写快速可移植的非阻塞IO程序而设计的. lib ...
- libevent和libcurl实现http和https服务器 cJSON使用
前言 libevent和libcurl都是功能强大的开源库:libevent主要实现服务器,包含了select.epoll等高并发的实现:libcurl实现了curl命令的API封装,主要作为客户端. ...
- libevent(了解)
1 前言 Libevent是一个轻量级的开源高性能网络库,使用者众多,研究者更甚,相关文章也不少.写这一系列文章的用意在于,一则分享心得:二则对libevent代码和设计思想做系统的.更深层次的分析, ...
- libevent源码深度剖析四
libevent源码深度剖析四 ——libevent源代码文件组织 1 前言 详细分析源代码之前,如果能对其代码文件的基本结构有个大概的认识和分类,对于代码的分析将是大有裨益的.本节内容不多,我想并不 ...
- libevent源码深度剖析三
libevent源码深度剖析三 ——libevent基本使用场景和事件流程 张亮 1 前言 学习源代码该从哪里入手?我觉得从程序的基本使用场景和代码的整体处理流程入手是个不错的方法,至少从个人的经验上 ...
- libevent源码深度剖析一
libevent源码深度剖析一 ——序幕 张亮 1 前言 Libevent是一个轻量级的开源高性能网络库,使用者众多,研究者更甚,相关文章也不少.写这一系列文章的用意在于,一则分享心得:二则对libe ...
- Libevent:11使用Libevent的DNS上层和底层功能
Libevent提供了一些API用来进行DNS域名解析,并且提供了实现简单DNS服务器的能力. 本章首先描述域名解析的上层功能,然后介绍底层功能及服务器功能. 注意:Libevent的当前DNS客户端 ...
- Linux下Libevent安装和简单实用
前言 Libevent 是一个用C语言编写的.轻量级的开源高性能事件通知库,主要有以下几个亮点:事件驱动( event-driven),高性能;轻量级,专注于网络,不如 ACE 那么臃肿庞大:源代码相 ...
随机推荐
- 【vue】imitate-beautiful-thing
我从未见过这么美妙的项目,当然与我接触的项目少有关,但是这个项目满满的艺术气息,让人沉醉,让人忍不住的去研究代码. 先放项目地址:https://github.com/eidonlon/imitate ...
- writing-mode,文字竖直书写,字符之间距离,单词之间距离
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- Springmvc使用阿里巴巴的fastjson传输到前台中文乱码的解决方案,他娘的大家都少制造垃圾,学习过程将会多么快乐
弄了大概七八个小时吧 都他妈比的抄来抄去,一分一秒的去试错 最终参考这个问题解决了乱码的情况https://bbs.csdn.net/topics/392169549 412 需要在springmvc ...
- MySQL笔记<一>创建数据库和表
参考博客 https://www.cnblogs.com/sqbk/p/5806797.html https://www.cnblogs.com/tomasman/p/7151962.html
- mysql 分表-横向,纵向
mysql 分库分表 分表是分散数据库压力的好方法. 分表,最直白的意思,就是将一个表结构分为多个表,然后,可以再同一个库里,也可以放到不同的库. 当然,首先要知道什么情况下,才需要分表.个人觉得单表 ...
- db link的查看创建与删除 1
1.查看dblink select owner,object_name from dba_objects where object_type='DATABASE LINK'; 或者 select * ...
- Leetcode74. Search a 2D Matrix搜索二维矩阵
编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值.该矩阵具有如下特性: 每行中的整数从左到右按升序排列. 每行的第一个整数大于前一行的最后一个整数. 示例 1: 输入: matrix ...
- js中的如何定位固定层的位置
需要获取一些HTML的对象的坐标来更灵活的设置目标层的坐标,这里可以通过用到document.body.scrollTop等属性,但是这些属性在xhtml的标准网页中或更简单的说就是带<!DOC ...
- Vue2.0史上最全入坑教程(下)—— 实战案例
书接上文 前言:经过前两节的学习,我们已经可以创建一个vue工程了.下面我们将一起来学习制作一个简单的实战案例. 说明:默认我们已经用vue-cli(vue脚手架或称前端自动化构建工具)创建好项目了 ...
- LUOGU P1081 开车旅行 (noip 2012)
传送门 解题思路 这道题刚了一下午,主要就刚在set那里了.先写了一个暴力70分..之后优化预处理,看着大佬神犇们都用的什么双向链表之类的东西,本蒟蒻不会,又懒得手写平衡树,就拿了个set搞了搞,感觉 ...