当前位置: 代码迷 >> 综合 >> 计算机网络(Linux系统)--libevent
  详细解决方案

计算机网络(Linux系统)--libevent

热度:61   发布时间:2024-01-28 09:17:16.0

以下引用自:https://zhuanlan.zhihu.com/p/87562010

一、libevent介绍

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

在这里插入图片描述

二、libevent特点和组成

  • libevent的特点和优势:
  1. 事件驱动,高性能;
  2. 轻量级,专注于网络;
  3. 跨平台,支持 Windows、Linux、Mac Os等;
  4. 支持多种 I/O多路复用技术, epoll、poll、dev/poll、select 和kqueue 等;
  5. 支持 I/O,定时器和信号等事件;
  • libevent的组成:
  1. 事件管理包括各种IO(socket)、定时器、信号等事件,也是libevent应用最广的模块;
  2. 缓存管理是指evbuffer功能;
  3. DNS是libevent提供的一个异步DNS查询功能;
  4. HTTP是libevent的一个轻量级http实现,包括服务器和客户端

三、libevent案例

  • API及调用顺序为:
  1. event_base()初始化event_base
  2. event_set()初始化event
  3. event_base_set()将event绑定到指定的event_base上
  4. event_add()将event添加到事件链表上,注册事件
  5. event_base_dispatch()循环、检测、分发事件
#include <stdio.h>
#include <event.h>
#include <time.h>struct event ev;
struct timeval tv;void timer_cb(int fd, short event, void *arg)    //回调函数
{printf("timer_cb\n");event_add(&ev, &tv);    //重新注册
}int main()
{struct event_base *base = event_init();  //初始化libevent库tv.tv_sec = 1;tv.tv_usec = 0;event_set(&ev, -1, 0, timer_cb, NULL);  //初始化event结构中成员event_base_set(base, &ev);event_add(&ev, &tv);  //将event添加到events事件链表,注册事件event_base_dispatch(base);  //循环、分发事件return 0;
}

结果:

timer_cb
timer_cb
timer_cb
timer_cb
timer_cb
timer_cb
timer_cb
timer_cb
timer_cb

以下来自于视频教学课程

四、重要函数

在这里插入图片描述

五、事件创建

在这里插入图片描述

六、事件的状态转化

在这里插入图片描述