libevent
libevent可以简单理解为事件驱动库,它会在下列事件发生时调用回调函数:
- 指定的事件在fd上发生
- 定时器触发
- 信号
- 超时
使用它可以替代事件驱动的网络服务中的事件循环。应用程序只需要调用 event_dispatch() ,然后就可以在不改动事件循环的情况下动态增删指定的事件。
它支持 /dev/poll, kqueue(2), event ports, POSIX select(2), Windows select(), poll(2), and epoll(4)
。
关于网络服务的事件通告机制可以参考 The C10K problem 。
本文介绍在Win10 vs2015环境下对该库的安装和使用,主要对遇到的问题及解决方法作一记录,供参考。
安装方式
使用官方介绍的方式安装:cmake
两种方式:
- 直接使用cmake编译安装
> md build && cd build
> cmake -G "Visual Studio 10" .. # Or use any generator you want to use. Run cmake --help for a list
> cmake --build . --config Release # Or "start libevent.sln" and build with menu in Visual Studio.
- 使用cmake生成nmake makefile,再使用nmake安装
> cmake -LH .. # 生成Makefile.nmake
# 使用vs本地命令行工具运行nmake命令完成编译安装
两种方法异曲同工,一种方法能够成功,另一种也一样。
本文主要介绍第一种方式。
详细安装
- 在github中下载最新稳定发布版本,release-2.1.11-stable
- 解压,打开cmd命令行工具,进入目录
- 执行
md build && cd build
,这一步就是创建一个目录,不会报错(如果报错,检查权限) - 执行
cmake -G "Visual Studio 14" ..
,这里需要生成vs2015的环境,根据自己需要修改
这里可能会遇到各种错误,我遇到的主要有:
- Could NOT find OpenSSL:由于我不需要该特性,在编译时命令行参数中选择不编译openssl
- cmake/Uninstall.cmake.in does not exist:查看了资料,是卸载相关的东西,就修改了cmake文件,略过了
- 修改如下:
最终使用编译命令为:
cmake .. -G "Visual Studio 14 2015" -DCMAKE_BUILD_TYPE=Debug -DEVENT__DISABLE_OPENSSL:BOOL=ON -DEVENT__LIBRARY_TYPE:STRING=STATIC -DEVENT__DISABLE_TESTS:BOOL=ON
编译完成的截图:
- 其他可设置参数请使用
cmake -LAH
查看。
- 安装
cmake --build . --config Debug
,根据需要选择参数即可。
编译生成的库位于 lib/Debug/下:
ibevent_core.lib
libevent_extras.lib
libevent.lib
使用
在vs2015项目中,分别创建include和lib目录,并把它们分别添加到项目属性中。
- 拷贝生成的3个库到项目lib下,并分别添加到项目属性(包括目录和库名字)
- 拷贝libevent-2.1.11-stable目录下的include和WIN32-Code目录下所有文件到项目include下,并把两目录下event2下的头文件合并到一个目录中
至此,设置完毕,可以在项目中使用。
参考资料
libevent – an event notification library
Event notification library
Building and installing Libevent
Can I do “make uninstall” with CMake?