Cómo implementar el mecanismo de eventos en Linux
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)