目录
介绍基本概念:
libevent的核心实现: 和前边讲的Reactor 差不多
在linux上, 其实质就是epoll反应堆.
libevent是事件驱动, epoll反应堆也是事件驱动, 当要监测的事件发生的时候, 就会调用事件对应的回调函数, 执行相应操作. 特别提醒: 事件回调函数是由用户开发的, 但是不是由用户显示去调用的, 而是由libevent去调用的.
介绍一下库的内容:
include /event2 是在2.0 以后版本引入的 以前的版本没有此文件夹
- 以event.h开头的提供核心函数, http.h 提供http协议相关服务类型 rcp.h 提供远程过程调用等功能。
- 还存在通用数据结构目录 compat/sys 该目录下 存在一个queue.h文件 里面封装了基础出具结构 包括单向链表 双向链表 队列,等。如下:链表
#define LIST_HEAD(name, type) \ struct name { \ struct type *lh_first; /* first element */ \ } #define LIST_HEAD_INITIALIZER(head) \ { NULL } #define LIST_ENTRY(type) \ struct { \ struct type *le_next; /* next element */ \ struct type **le_prev; /* address of previous next element */ \ }
- Sample 存在一些实例代码等;
- test存在一些测试代码 压力测试等;
- WIN32-Code 目录 提供Windows平台的专用代码;
- event.c文件 该文件是libevent 整体框架 主要存在event和event_base 两个主要结构;
- devpool.c kqueue.c evport.c select.c poll.c epoll.c 分别封装了I/O复用机制,常见的poll select epoll 函数等并且留有接口函数;
- signal.c 提供了一些信号触发函数 其内容为eventop定义的结构体的具体实现
- evthread*.c 支持多线程函数;
- listener.c 对listen进行封装 包括监听和连接过程。
- htttp.c 对文件http 访问进行了函数封装。
libevent库例的使用
进入到libevent-2.0.22-stable/sample下, 可以查看一些示例源代码文件.
使用libevent库编写代码在编译程序的时候需要指定库名:-levent;
安装文件的libevent库文件所在路径:libevent-2.0.22-stable/.libs;
编写代码的时候用到event.h头文件, 或者直接参考sample目录下的源代码文件也可以.
#include <event2/event.h>
编译源代码文件(以hello-world.c文件为例)
gcc hello-world.c -levent
由于安装的时候已经将头文件和库文件拷贝到了系统头文件所在路径/usr/local/include和系统库文件所在路径/usr/local/lib, 所以这里编译的时候可以不用指定-I和-L.
编译示例代码hello-world.c程序:
gcc -o hello-world hello-world.c -levent
测试: 在另一个终端窗口进行测试,
输入: nc 127.1 9995, 然后回车立刻显示 Hello, World! 字符串.