libevent
libevent是一个轻量级的开源的高性能的事件触发的网络库,适用于windows、linux、bsd等多种平台,内部使用select、epoll、kqueue等系统调用管理事件机制。
它被众多的开源项目使用,如memcached等。 特点: 事件驱动,高性能; 轻量级,专注于网络(相对于ACE); 开放源码,代码相当精炼、易读; 跨平台,支持Windows、Linux、BSD和Mac OS; 支持多种I/O多路复用技术(epoll、poll、dev/poll、select和kqueue等),在不同的操作系统下,做了多路复用模型的抽象,可以选择使用不同的模型,通过事件函数提供服务; 支持I/O,定时器和信号等事件;
Reactor模式
libevent是一个典型的reactor模式的实现。 普通的函数调用机制:程序调用某个函数,函数执行,程序等待,函数将结果返回给调用程序(如果含有函数返回值的话),也就是顺序执行的。 Reactor模式的基本流程:应用程序需要提供相应的接口并且注册到reactor反应器上,如果相应的事件发生的话,那么reactor将自动调用相应的注册的接口函数(类似于回调函数)通知你,所以libevent是事件触发的网络库。
Linux下libevent主要API
创建事件集 struct event_base *event_base_new(void);
创建事件 struct event event_new (struct event_base ,evutil_socket_t ,short ,event_callback_fn, void*)
添加事件 int event_add(struct event * ev,const struct timeval* timeout)
删除事件 int event_del(struct event *)
事件循环 int event_base_loop(struct event_base *base, int flags) int event_base_dispatch(struct event_base *event_base)
libevent官网
http://libevent.org/
- 首先我们先来安装这个libevent,跟着我以下的步骤来进行
进入到官网,就会看到以下页面,然后右键点击要安装的版本 
现在进入到我们的Linux系统,首先用sudo su命令进入root用户
使用命令(要有网络的情况下才能下载) 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命令 (注意根据自己下载的版本)   解压成功之后我们就可以进入libevent-2.1.12-stable这个目录里面去了
进入目录之后就会看到很多文件  然后执行 ./configure --disable-openssl 这个命令配置安装路径 
看到上面这个说明配置成功了
然后再执行make   make成功之后,再执行make install命令 经过以上步骤就成功安装libevent了
怎么查看libevent是否安装成功呢,我们可以执行 ls -la /usr/local/include | grep event这个命令看查看

我这边呢,准备了一个测试代码(只是部分代码截图)   编译时后面需要带上 -levent 
编译成功之后,我们执行这个文件的时候,就会看到这个错误!!!(当然,有的可能没有这个错误)   这个是执行后的程序提示找不到libvent的so,则创建库的链接和缓存文件,那么怎么解决这个问题呢?
其实解决这个问题很简单,我们只要输入 ldconfig 命令就可以了 
这样就可以解决了,然后接下来就可以进行执行我的程序了 客户端通过telnet 和 ip + 端口号连接服务端  再客户端输入信息服务端接收  
这样就实现了libevent的安装和解决编译执行的问题,如果有想要这个源码的可以在评论中留言
|