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 那么臃肿庞大:源代码相 ...
随机推荐
- TZOJ 5986 玄武密码(AC自动机)
描述 在美丽的玄武湖畔,鸡鸣寺边,鸡笼山前,有一块富饶而秀美的土地,人们唤作进香河.相传一日,一缕紫气从天而至,只一瞬间便消失在了进香河中.老人们说,这是玄武神灵将天书藏匿在此. 很多年后,人们终于在 ...
- Django项目:CRM(客户关系管理系统)--45--37PerfectCRM实现King_admin添加用户时密码加密
#views # ————————02PerfectCRM创建ADMIN页面———————— from django.shortcuts import render # ————————04Perfe ...
- CSS3实现3D地球自转行星公转
截图效果:实际效果是动态的:地球自西向东自转,行星绕着地球公转,轨道也会转动 HTML页面代码: <!DOCTYPE html> <html lang="en"& ...
- JavaScript类型转换规则
注:JavaScript相对于其他强类型(如c,c++,java,定义变量的同时申明变量类型)语言来说,是弱类型和松散型(在定义的时候不需要申明变量类型,在使用的时候才赋值给她什么类型就是什么类型.所 ...
- mysql查询某个字段重复的数据
查询某个字段重复的数据 ; 查询股票重复的营业厅 ;
- spring boot resttemplate发送post,get请求
参考博客: https://blog.csdn.net/weixin_42456466/article/details/80728387 https://www.cnblogs.com/QQParad ...
- 解释器模式(Interpreter、Context、Expression)
(给定一门语言,定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子.) 解释器模式的定义是一种按照规定语法进行解析的方案,在现在项目中使用的比较少,其定义如下: Given ...
- db link的查看创建与删除 1
1.查看dblink select owner,object_name from dba_objects where object_type='DATABASE LINK'; 或者 select * ...
- 2019-7-3-WPF-使用-Composition-API-做高性能渲染
title author date CreateTime categories WPF 使用 Composition API 做高性能渲染 lindexi 2019-07-03 10:30:57 +0 ...
- 【CodeVS】1083 Cantor表
1083 Cantor表 1999年NOIP全国联赛普及组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 白银 Silver 题目描述 Description 现代数学的著名证明之 ...