【Libevent】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本身的框架大概了解,那或许仅仅是一知半解,不深入代码分析,就难以了解其设计的精巧之处,也就难以为自己所用。

扫描二维码关注公众号,回复: 11883570 查看本文章

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/sample

deng@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 - 一种数据库加密工具。

05. 参考资料

官方参考网站: https://www.monkey.org/~provos/libevent/doxygen-2.0.1/index.html

猜你喜欢

转载自blog.csdn.net/dengjin20104042056/article/details/90732997
今日推荐