现在高性能网络服务器基本都是异步I/O模式构建的,而Libevent就是对select、poll、epoll等各类异步模式接口的封装,通过设置回调函数的方式,在监听文件描述符和套接字读写事件的同时,还兼任定时器和信号接收的管理工作。Libevent对高性能服务器后台开发、跨平台开发、网络开发都具有很大的参考学习价值。官方主页显示很多的项目都用到了Libevent库,而且还可作为主机内部进程间通信和数据交互。Libevent也考虑到pthread线程模型的同步问题,保证关键数据结构在多线程并行下的数据安全!
简介的说:Libevent 是一个用C语言编写的、轻量级的开源高性能事件通知库,
主要有以下几个技术点:
- 事件驱动,高性能;轻量级,专注于网络,
- 支持跨平台、可以在Windows、Linux和Mac Os等环境下运行;
- 支持多种 I/O 多路复用技术等;
- 支持 I/O,定时器和信号等事件;注册事件优先级
libevent 由下列组件构成:
- evutil:用于抽象不同平台网络实现差异的通用功能。
- event 和event_base:libevent 的核心,为各种平台特定的、基于事件的非阻塞IO 后端提供抽象API,让程序可以知道套接字何时已经准备好,可以读或者写,并且处理基本的超时功能,检测OS 信号。
- bufferevent:为libevent 基于事件的核心提供使用更方便的封装。除了通知程序套接字已经准备好读写之外,还让程序可以请求缓冲的读写操作,可以知道何时IO 已经真正发生。
- evbuffer:在bufferevent 层之下实现了缓冲功能,并且提供了方便有效的访问函数。
- evhttp:一个简单的HTTP 客户端/服务器实现。
- evdns:一个简单的DNS 客户端/服务器实现。
- evrpc:一个简单的RPC 实现
安装库
#在当前目录下解压安装包:
tar -zxvf llibevent-2.1.12-stable.tar.gz
cd libevent-2.1.12-stable
./configure --prefix=/usr
make
make install
实践设计需要:
1.实现服务器和客户端的通信,传输特定的数据结构格式
typedef struct
{
char head[4];
unsigned long pack_len;
int code;
} msg_header;
实现采用分为两种方式,包括不带缓冲的事件框架和带缓冲的事件框架
网络编程-libevnet带缓冲的事件框架
网络编程-libevnet编程整理一些小事项
资料参考:
https://blog.gmem.cc/libevent-study-note
https://blog.csdn.net/qq769651718/article/details/79431368
https://blog.csdn.net/dengjin20104042056/category_9267682.html
https://blog.csdn.net/luotuo44/category_2435521.html
https://blog.csdn.net/windeal3203/category_6489079.html
https://blog.csdn.net/weixin_44718794/category_10018798.html