【传智播客】Libevent学习笔记(一):简介和安装
00. 目录
@
01. libevent简介
什么是libevent
Libevent 是一个用C语言编写的、轻量级的开源高性能事件通知库,主要有以下几个亮点:事件驱动( event-driven),高性能;轻量级,专注于网络,不如 ACE 那么臃肿庞大;源代码相当精炼、易读;跨平台,支持 Windows、 Linux、 *BSD 和 Mac Os;支持多种 I/O 多路复用技术, epoll、 poll、 dev/poll、 select 和 kqueue 等;支持 I/O,定时器和信号等事件;注册事件优先级。
Chromium、Memcached、NTP、HTTPSQS等著名的开源程序都使用libevent库,足见libevent的稳定。更多使用libevent的程序可以到libevent的官网查看。
libevent主要组成
libevent包括事件管理、缓存管理、DNS、HTTP、缓存事件几大部分。事件管理包括各种IO(socket)、定时器、信号等事件;缓存管理是指evbuffer功能;DNS是libevent提供的一个异步DNS查询功能;HTTP是libevent的一个轻量级http实现,包括服务器和客户端。libevent也支持ssl,这对于有安全需求的网络程序非常的重要,但是其支持不是很完善,比如http server的实现就不支持ssl。
libevent核心实现
Reactor(反应堆)模式是libevent的核心框架,libevent以事件驱动,自动触发回调功能。之前介绍的epoll反应堆的源码,就是从libevent中抽取出来的。
02. Libevent的好处
学习libevent有助于提升程序设计功力,除了网络程序设计方面外,Libevent的代码里有很多有用的设计技巧和基础数据结构,比如信息隐藏、函数指针、c语言的多态支持、链表和堆等等,都有助于提升自己的C语言功底。
程序设计不止要了解框架,很多细节之处恰恰也是事关整个系统成败的关键。只对libevent本身的框架大概了解,那或许仅仅是一知半解,不深入代码分析,就难以了解其设计的精巧之处,也就难以为自己所用。
03. Libevent的安装和测试
官方网站: http://libevent.org
源码包下载:
- 1.4.x 系列,较为早期版本,适合源码学习
- 2.x 系列,较新的版本,代码量比1.4版本多很多,功能也更完善。
源码包的安装,以2.0.22版本为例,在官网可以下载到源码包libevent-2.0.22-stable.tar.gz,基本安装步骤与第三方库源码包安装方式基本一致。
安装步骤如下:
第一步: 解压
deng@itcast:~$ tar -xvf libevent-2.0.22-stable.tar.gz
第二步: 进入到对应的目录
deng@itcast:~$ cd libevent-2.0.22-stable/
第三步: 检测环境, 生成Makefile
deng@itcast:~/libevent-2.0.22-stable$ ./configure
第四步: 编译 生成动态库和静态库
deng@itcast:~/libevent-2.0.22-stable$ make
第五步: 安装 一定要使用管理员的权限
deng@itcast:~/libevent-2.0.22-stable$ sudo make install
第六步: 测试 执行hello-world
deng@itcast:~/libevent-2.0.22-stable$ cd sample/
deng@itcast:~/libevent-2.0.22-stable/sample$ pwd
/home/deng/libevent-2.0.22-stable/sampledeng@itcast:~/libevent-2.0.22-stable/sample$ ./hello-world
另外打开一个终端, 输入如下命令
deng@itcast:~/libevent-2.0.22-stable/sample$ nc 192.168.73.44 9995
Hello, World!
如果出现你好, 世界! 说明软件安装ok..
库所在目录: /usr/local/lib
头文件所在的目录: /usr/local/include
04. Libevent成功案例
- Chromium - 谷歌的开源网络浏览器(在Mac和Linux上使用Libevent)
- Memcached - 一种高性能的分布式内存对象缓存系统
- Transmission- 一个快速,简单,免费的BitTorrent客户端
- NTP - 使您的时钟正确的网络时间协议(在SNTP中使用Libevent)
- tmux - 一个干净,现代,BSD许可的终端多路复用器,类似于GNU屏幕
- Tor - 一个匿名的互联网通信系统。
- libevhtp - libevent的http客户端/服务器API的快速而灵活的替代品
- Prosody - 用Lua编写的Jabber / XMPP服务器
- PgBouncer - PostgreSQL的轻量级连接池
- redsocks - 一个简单的透明TCP - > Socks5 / HTTPS代理守护进程。
- Crawl 一个小而高效的HTTP抓取工具
- Libio - 输入/输出抽象库
- Honeyd - 一个虚拟的蜜网守护进程 - 可以用来对抗互联网蠕虫。
- Fragroute - IDS测试工具
- Nylon - 嵌套代理服务器
- Disconcert - 松散耦合工作站的分布式计算框架。
- watchcatd - 软件看门狗,旨在采取不像通常的解决方案那样激烈的行动,重置机器。
- ScanSSH - 快速SSH服务器和开放代理扫描程序。
- Nttlscan - Honeyd的网络拓扑扫描仪。
- NetChat - netcat和ppp聊天的组合。
- Io - 一种小型编程语言; 使用libevent进行网络通信。
- Systrace - 系统调用沙箱。
- SpyBye - 检测网页上的恶意软件。
- GreenSQL - 一个SQL数据库防火墙。
- dnsscan - 用于识别开放递归dns解析器的快速扫描器
- Kargo Event - libevent的PHP扩展。
- Scytale - 一种数据库加密工具。
【传智播客】Libevent学习笔记(一):简介和安装的更多相关文章
- 传智播客Springmvc_mybatis学习笔记
文件地址:https://download.csdn.net/download/qq_26078953/10614459
- 传智播客JavaWeb day02笔记
2015年1月21日 今天的主要内容:介绍了几款常用Javaweb服务器,重点介绍了tomcat以及tomcat的安装和怎么样检测安装成功 1.JavaWeb常见服务器 Tomcat(免费但是只支持部 ...
- 【传智播客】Libevent学习笔记(三):事件循环
目录 00. 目录 01. event_base_loop函数 02. event_base_dispatch函数 03. event_base_loopexit函数 04. event_base_l ...
- 【传智播客】Libevent学习笔记(五):基本类型和函数
目录 00. 目录 01. 基本类型 1.1 evutil_socket_t类型 1.2 标准类型 1.3 各种兼容性类型 02. 可移植的定时器函数 03. 套接字API兼容性 04. 可移植的字符 ...
- 【传智播客】Libevent学习笔记(四):事件event
目录 00. 目录 01. 事件概述 02. 创建事件 03. 事件的标志 04. 事件持久性 05. 超时事件 06. 信号事件 07. 设置不使用堆分配的事件 08. 事件的未决和非未决 09. ...
- 【传智播客】Libevent学习笔记(二):创建event_base
目录 00. 目录 01. 简介 02. 创建默认的event_base 03. 创建复杂的event_base 3.1 event_config_new函数 3.2 event_base_new_w ...
- 传智播客.NET视频学习课件
传智播客.NET视频学习课件访问.NET网站了解更多课程详情http://net.itcast.cn(小提示:为什么本书中超链接打不开?)此套课件是伴随 传智播客.net实况教学视频 (小提示:为什么 ...
- 传智播客学习之Android运行原理 (转)
传智播客学习之Android运行原理 (2010-03-20 22:45:15) 转载▼ 今天终于忙里偷闲,和大家探讨一下android技术,第一次听到3G应该追溯到大学三年级的时候了,记得当时现代通 ...
- 传智播客JavaWeb day01 快捷键、XML
2015-01-14 一直计划着学习java,今天晚上终于下定决心看了下传智播客朴乾老师的javaweb开发视频day01之第一讲,主要内容是开发工具简单介绍.怎么创建工程.Junit的介绍,我是C# ...
- 传智播客C语言视频第二季(第一季基础上增加诸多C语言案例讲解,有效下载期为10.5-10.10关闭)
卷 backup 的文件夹 PATH 列表卷序列号为 00000025 D4A8:14B0J:.│ 1.txt│ c语言经典案例效果图示.doc│ ├─1传智播客_尹成_C语言从菜鸟到高手_第一 ...
随机推荐
- BZOJ_2819_Nim_树状数组维护出栈入栈序
BZOJ_2819_Nim_树状数组维护出栈入栈序 Description 著名游戏设计师vfleaking,最近迷上了Nim.普通的Nim游戏为:两个人进行游戏,N堆石子,每回合可以取其中某一堆的任 ...
- [软件安装]JDK
一.软件简介1.java开发.java应用的系统基础环境2.软件版本会不同有少许差异,一般是稳定上升 二.安装环境:1.时间:2017年4月5日2.系统:centos7.3 64位(阿里云)3.软件版 ...
- bzoj 3308: 九月的咖啡店【最大费用最大流】
费用流里spfa最后的判断要写成dis[t]>=0而不是dis[t]!=-inf否则会WAWAWA-- #include<iostream> #include<cstdio&g ...
- bzoj 5281: [Usaco2018 Open]Talent Show【dp】
注意到sum_t比较小,所以设f[i][j]为选前i头牛,当前sum_t为j的最小sum_w值,转移是f[i][j]=min(f[i-1][j],f[i-1][j-t[i]]+w[i]),然后i维用滚 ...
- bzoj 2876: [Noi2012]骑行川藏【拉格朗日乘数法+二分】
详见: http://blog.csdn.net/popoqqq/article/details/42366599 http://blog.csdn.net/whzzt/article/details ...
- bzoj 4818: [Sdoi2017]序列计数【容斥原理+dp+矩阵乘法】
被空间卡的好惨啊---- 参考:http://blog.csdn.net/coldef/article/details/70305596 容斥,\( ans=ans_{没有限制}-ans{没有质数} ...
- react hooks 全面转换攻略(三) 全局存储解决方案
针对 react hooks 的新版本解决方案 一.redux维持原方案 若想要无缝使用原来的 redux,和其配套的中间件 promise,thunk,saga 等等的话 可以使用 redux-re ...
- springboot(四)拦截器和全局异常捕捉
github代码:https://github.com/showkawa/springBoot_2017/tree/master/spb-demo/spb-brian-query-service 全部 ...
- 【SpringCloud构建微服务系列】学习断路器Hystrix
一.Hystrix简介 在微服务架构中经常包括多个服务层,比如A为B提供服务,B为C和D提供服务,如果A出故障了就会导致B也不可用,最终导致C和D也不可用,这就形成了雪崩效应. 所以为了应对这种情况, ...
- Python学习规划
短时间踏实而高效的学习python 知乎:如何系统的学习python 简书:最全的python学习手册 目录 Python编程语言 python视频教程 Python神经网络算法与深度学习视频教程人工 ...