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 那么臃肿庞大:源代码相 ...
随机推荐
- 2019-1-29-dotnet-使用-Qpush-快速从电脑到手机推送文字
title author date CreateTime categories dotnet 使用 Qpush 快速从电脑到手机推送文字 lindexi 2019-01-29 16:22:56 +08 ...
- qq邮箱html邮件,图片不显示的问题
测试无论是站外的图片还是站内的图片,qq邮箱都会过滤图片,导致显示不出来. 解决办法:图片base64编码.效果图: 代码: <div class="container"&g ...
- mybatis学习:mybatis注解开发一对多
实体类User: public class User implements Serializable { private Integer id; private String username; pr ...
- Docker(五)安装Fastdfs
https://blog.csdn.net/qq_37759106/article/details/82981023 有2个提示: 这篇博客nginx开放的80端口, 首先要打开防火墙80的端口: 测 ...
- Win7+AMD+VS2013+opencl1.x安装与测试
参考资料:http://www.cnblogs.com/lihao602/archive/2013/05/08/3067239.html: http://blog.csdn.net/zhoubo616 ...
- 本地文件访问json数据格式,在chrome中没反应
原因:存在跨域问题 在JavaScript的安全性上,有一条很重要的安全限制,叫“同源策略”.就是一个脚本只能读取与它同源(如由同一个主机下载,通过同一个端口下载或者下载协议相同)的窗口或者文档的属性 ...
- 在VUE中实现打印
1.安装 npm install vue-print-nb --save 2.在mian.js中引入 import Print from 'vue-print-nb' Vue.use(Print); ...
- MacBook安装QF9700网卡驱动
HOW TO USE A GENERIC USB ETHERNET ADAPTER QF9700 ON MAC OS X 20 February 2016 macOS Zahid Mahmood ...
- Hibernate中的Query
//1:创建query对象,方法里面写hql语句 Query query = session.createQuery("from User"); //2:利用query对象中的方法 ...
- Django高级实战 开发企业级问答网站
Django高级实战 开发企业级问答网站 整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感受,单论单个知识点课程本身没问题,大家看的 ...