libevent网络库

libevent概述

Libevent 是一个用C语言编写的、轻量级的开源高性能事件通知库,主要有以下几个亮点:事件驱动( event-driven),高性能;轻量级,专注于网络,不如 ACE 那么臃肿庞大;源代码相当精炼、易读;跨平台,支持 Windows、 Linux、 *BSD 和 Mac Os;支持多种 I/O 多路复用技术, epoll、 poll、 dev/poll、 select 和 kqueue 等;支持 I/O,定时器和信号等事件;注册事件优先级。

获取源码
链接:https://pan.baidu.com/s/1nMj9pXvimxnpWO9WRcNzHA
提取码:buer

安装

tar -zxvf libevent-2.1.8-stable.tar.gz //解压
/usr/lib/libevent						//创建lib文件夹
./configure -prefix=/usr/lib/libevent   //配置
make									//编译
make install							//安装

编译安装libevent源码之后,进入文件sample cd /sample
接下来,我们可以看到libevent官方为我们提供的demo,
打开hello-world.c文件查看示例代码。

发现监听端口号为:9995
好,接下来我们开始libevent的奇妙之旅,
使用终端启动两个本地连接,
服务端:在上述路径执行 ./hello-world
客户端:采用nc进行访问 nc 127.0.0.1 9995 9995为上述代码中指定的端口号
每有客户端注册时 server端将打印 flushed answer,同时,client端打印Hello, World!
框架学习-- event_base 重中之重
翻读源码中有这样一句话:

The Event_base Lies At The Center Of Libevent; Every Application Will Have One.

夸张的理解为:libevent的世界中,event_base作为万物起源

使用 libevent 函数之前需要分配一个或者多个 event_base 结构体。每个event_base
结构体持有一个事件集合,可以检测以 确定哪个事件是激活的。(相当于epoll红黑树的树根)

event_base()创建与释放
libevent网络库_第1张图片

event_new()创建与释放

// 创建新事件
	struct event *event_new(
		struct event_base *base, 
		evutil_socket_t fd, - // 文件描述符 - int  **底层是对epollin与epollout的封装**
		short what, 
		event_callback_fn cb, // 事件的处理回调函数
		void *arg //回调函数传参
); 
// 事件的处理回调函数
	typedef void (*event_callback_fn)(evutil_socket_t, short, void *); 
//	short what
	#define  EV_TIMEOUT         0x01    // 已淘汰(忽略)
	#define  EV_READ            0x02
	#define  EV_WRITE           0x04
	#define  EV_SIGNAL          0x08    //libevent封装了信号相关的操作 SIGNAL
	#define  EV_PERSIST         0x10    // 持续触发
	#define  EV_ET              0x20    // 边沿模式

你可能感兴趣的:(项目学习,c++,网络)