1. 编译安装
官方网站:https://libevent.org/
1.1 安装方式1: 从GitHub下载源码编译安装
# 1. 从libevent官网获取github的地址后,使用git clone源码
[wengjh@QingYun git]$ git clone https://github.com/libevent/libevent.git
# 2. 编译源码
[wengjh@QingYun git]$ cd libevent/
[wengjh@QingYun libevent]$ mkdir build
[wengjh@QingYun libevent]$ cd build/
[wengjh@QingYun build]$ cmake3 ..
[wengjh@QingYun build]$ make
[wengjh@QingYun build]$ sudo make install
[wengjh@QingYun build]$ make verify # 校验安装结果,耗时有点久可以不执行
如果是想学习源码的同学建议使用这种方式安装,方便修改源码后重新编译和调试源码
1.2 安装方式2: 从官网下载安装包编译安装
$ wget https://github.com/libevent/libevent/releases/download/release-2.1.12-stable/libevent-2.1.12-stable.tar.gz
$ tar -zxvf libevent-2.1.12-stable.tar.gz
$ cd libevent-2.1.12-stable/
$ ./configure
$ make
$ sudo make install
生产环境下建议使用这种方式安装,官方正式发布的版本一般是更可靠的版本
1.3 验证安装
[wengjh@QingYun libevent]$ whereis libevent
libevent: /usr/local/lib/libevent.so /usr/local/lib/libevent.la /usr/local/lib/libevent.a
[wengjh@QingYun libevent]$
1.4 运行官方demo
# 启动服务端:hello-world【方式1的执行文件在build/bin/下,方式2的执行文件在安装目录的sample路径下】
[wengjh@QingYun sample]$ ./hello-world
flushed answer
# 启动客户端
[wengjh@QingYun ~]$ nc 127.0.0.1 9995
Hello, World!
到这里,安装已经结束。
2. 建立测试代码
建立测试代码是为了学习源码时方便调试而建立的测试目录、测试代码、测试代码的make文件
2.1 创建目录
[wengjh@QingYun libevent]$ mkdir test-wjh
[wengjh@QingYun libevent]$ cd test-wjh
[wengjh@QingYun test-wjh]$ vim CMakeLists.txt # 创建 CMakeLists.txt 文件
[wengjh@QingYun test-wjh]$ vim hello_event.cpp # 创建 hello_event.cpp 测试代码
2.2 创建CMakeLists.txt
cmake_minimum_required(VERSION 3.1.2)
SET(CMAKE_BUILD_TYPE DEBUG)
SET(CMAKE_CXX_STANDARD 11)
PROJECT(test_event)
INCLUDE_DIRECTORIES(/usr/local/include)
ADD_EXECUTABLE(hello_event hello_event.cpp)
LINK_DIRECTORIES(/usr/local/lib)
TARGET_LINK_LIBRARIES(hello_event libevent.so)
2.3 创建hello_event.cpp
#include <stdio.h>
// 使用libevent库所需头文件
#include <event.h>
void on_time(int sock, short event, void *arg)
{
printf("hello event.\n");
struct timeval tv;
tv.tv_sec = 1;
tv.tv_usec = 0;
// 事件执行后,默认就被删除,所以需要重新添加
event_add((struct event *)arg, &tv);
}
int main()
{
// 初始化事件
event_init();
// 设置定时器回调函数
struct event ev_time;
evtimer_set(&ev_time, on_time, &ev_time);
// 1s运行一次func函数
struct timeval tv;
tv.tv_sec = 1;
tv.tv_usec = 0;
// 添加到事件循环中
event_add(&ev_time, &tv);
// 程序等待就绪事件并执行事件处理
event_dispatch();
return 0;
}
2.4 编译和运行测试用例
[wengjh@QingYun test-wjh]$ mkdir build && cd build
[wengjh@QingYun test-wjh]$ make
[ 50%] Building CXX object CMakeFiles/hello_event.dir/hello_event.cpp.o
[100%] Linking CXX executable hello_event
[100%] Built target hello_even
[wengjh@QingYun test-wjh]$ ./hello_event
hello event.
hello event.
...