Red de conocimiento informático - Material del sitio web - Cómo implementar el mecanismo de eventos en Linux

Cómo implementar el mecanismo de eventos en Linux

I. Introducción a Libevent

libevent es una biblioteca de red basada en activación de eventos. Es adecuada para Windows, Linux, BSD y otras plataformas. Utiliza llamadas al sistema como select, epoll y kqueue para administrar eventos. mecanismos.

Características:

Alto rendimiento, impulsado por eventos;

Ligero, centrado en la red, no tan inflado como ACE, que solo proporciona subprocesos y encapsulación API de red simple. grupo, grupo de memoria, bloqueo recursivo, etc.

Código fuente abierto, el código es bastante conciso y fácil de leer

Multiplataforma, compatible con Windows, Linux, BSD y Mac OS; una variedad de tecnologías de reutilización de E/S (epoll, poll, dev/poll, select, kqueue, etc.) para lograr la abstracción. ), abstrae el modelo de multiplexación en diferentes sistemas operativos. Puede optar por utilizar diferentes modelos y proporcionar servicios a través de funciones de eventos;

Admite eventos como E/S, temporizadores y señales.

> Modo reactor;

2. Organización del código fuente

Aunque el código fuente de Libevent está todo en una capa de carpetas, su clasificación de código es relativamente clara y se puede dividir en archivos de encabezado. archivos de encabezado utilizados internamente, funciones auxiliares, registros, marco Libevent, mecanismo de multiplexación de E/S del sistema encapsulado, gestión de señales, gestión de eventos programados, gestión de búfer, estructuras de datos básicas y dos bibliotecas de utilidades basadas en libevent, etc., algunas de las cuales pueden ser archivos fuente.

1) Archivo de encabezado

principalmente event.h: definición de macro de evento, declaración de función de interfaz, declaración de evento de estructura principal

2) Archivo de encabezado interno

; p> p>

xxx-internal.h: estructuras y funciones de datos internos, que son invisibles para el mundo exterior para lograr el propósito de ocultar información;

3) marco libevent

event.c: implementación de código de todo el marco de eventos;

4) Encapsulación del mecanismo de multiplexación de E/S del sistema

epoll.c: encapsulación de E/S del sistema mecanismo de multiplexación

5) epoll.c: Encapsulación del mecanismo de multiplexación de E/S del sistema. c: encapsulación de epoll;

select.c: encapsulación de select;

devpoll.c: encapsulación de dev/poll;

kqueue.c: kqueue Encapsulación;

5) Gestión de eventos de tiempo

min-heap.h: en realidad es una pequeña estructura de montón raíz con el tiempo como clave

6); Gestión de señales

signal.c: contenedor de eventos de señales;

7) Funciones auxiliares

evutil.h y evutil.c: algunas funciones auxiliares, incluida la creación pares de sockets y algunas funciones de operación de tiempo: suma, resta y comparación.

8) Log

log.h y log.c: función de registro

9) Gestión del buffer

evbuffer.c y buffer .c: encapsulación del búfer de libevent;

10) Estructura de datos básica

Los dos archivos fuente en compat/sys: queue.h son la estructura de datos básica de la implementación de libevent, que incluye listas enlazadas, listas doblemente enlazadas, colas, etc.; _libevent_time.h: algunas definiciones de estructura, funciones y definiciones de macros para operaciones de tiempo;

11) Biblioteca de red práctica

http y evdns : servidor http y biblioteca de consultas dns asincrónicas basadas en libevent;

12)