[Tutorial avanzado C ++] Desarrollo de un marco de servidor desde cero (Sylar)
Admite la transmisión de estilo de escritura de registro y formato de registro de registro, admite la personalización del formato de registro, el nivel de registro, la separación de múltiples log y otras funciones, la transmisión de usos de registro: sylar_log_info (g_logger) , nivel de registro, nombre de registro, nombre de archivo, número de línea, etc.
Adopte la idea de la convención debido a la configuración. La definición está disponible. No hay necesidad de analizar por separado. Admite la función de notificación de cambio. Use archivos YAML como contenido de configuración. Admite tipos de datos en formatos de nivel, admite contenedores STL (vector, lista, conjunto, mapa, etc.), admite tipos personalizados (requiere métodos de serialización y deserialización) de la siguiente manera:
static sylar::ConfigVar< int >::ptr g_tcp_connect_timeout =
sylar::Config::Lookup ( " tcp.connect.timeout " , 5000 , " tcp connect timeout " );Se define un parámetro de tiempo de espera de conexión TCP.
tcp:
connect:
timeout: 10000El módulo de subprocesos encapsula algunas funciones de uso común en PTHREAD, como Subhore, Semaphore, Mutex, RWMutex, SpinLock, etc., que puede facilitar el desarrollo de los subprocesos para el uso diario de que el hilo en C ++ 11 no se aplica a los hilos a los hilos. Además, C ++ 11 no proporciona lectura y escritura mutex, rwmutex, spinlock, etc., y en escenarios de alta concurrencia, a menudo se usan estos objetos. Entonces elegí encapsular PTHread por mí mismo
Coroutine: el hilo en modo de usuario, equivalente a los subprocesos en los subprocesos, es más ligero. El gancho de socket está configurado en la configuración posterior, que puede encapsular llamadas asíncronas complejas en operaciones sincrónicas. Reduzca la complejidad de la lógica de negocios de escritura. Actualmente, el Coroutine se implementa en función de UContext_T, y se implementará de la manera posterior utilizando FContext_T en Boost.Context.
El planificador de Coroutine gestiona la programación de las coroutinas y se implementa internamente como un grupo de subprocesos, que admite Coroutinas para cambiar entre múltiples hilos, y también puede especificar que las coroutinas se ejecutan en subprocesos fijos. Es un modelo de programación de Coroutine NM, con n hilos y corutinas M. Reutilice cada hilo.
El programador de heredado y coroutine, encapsulate Epoll (Linux) y admite la función del temporizador (utilizando EPOLL para implementar el temporizador, el nivel de milisegundos), y admite la adición, eliminación y cancelación de la lectura de socket y el tiempo de escritura. Admite un temporizador único, temporizador de ciclo, temporizador de condición y otras funciones
El sistema de gancho subyacente y las API relacionadas con el zócalo, las API relacionadas con el enchufe IO y las API de la serie de sueño. El control de encendido del gancho es el hilo granular. Libre elección. A través del módulo de gancho, algunas API sin funciones asincrónicas se pueden usar para mostrar un rendimiento asíncrono. Por ejemplo (mysql)
Encapsula la clase Socket, proporciona todas las funciones de Socket API, unifica la clase de dirección y unifica las direcciones IPv4, IPv6 y UNIX. También proporciona funciones de nombre de dominio y resolución de IP.
El módulo de serialización binaria de ByteArray proporciona operaciones comunes en datos binarios. Lea y escriba tipos básicos INT8_T, INT16_T, INT32_T, INT64_T, etc., admite varint, std :: cadena para leer y escribir soporte, soporte de la conversión de bytes, serialización de soporte a archivos y deserialización de los archivos.
Según la clase Socket, encapsula una clase general del servidor TCPServer, proporciona una API simple, es fácil de usar y puede vincular rápidamente una o más direcciones, iniciar servicios, escuchar puertos, aceptar conexiones, manejar conexiones de socket y otras funciones. La implementación del servidor de funciones comerciales específicas se puede implementar rápidamente heredando esta clase.
Interfaz unificada de transmisión encapsulada. Encapsular archivos y enchufes en interfaces unificadas. Al usarlo, use un estilo unificado. Basado en un estilo unificado, puede proporcionar una expansión más flexible. SocketStream se implementa actualmente
Ragel (máquina de estado finito, rendimiento comparable al ensamblaje), implementa la implementación de protocolo simple de HTTP/1.1 y el análisis de URI. Basado en SocketStream, se implementan httpconnection (client http) y httpsession (enlace del servidor http). Httpserver se implementa en función de TCPServer. Proporciona la función completa de solicitud de API del cliente HTTP y la función del servidor API básico HTTP
Siguiendo el servlet de Java, se implementa un conjunto de interfaces de servlet, servletdispatch y functionServlet. Notfoundservlet. Admite la correspondencia precisa de URI, la coincidencia difusa y otras funciones. Junto con el módulo HTTP, proporcione funciones del servidor HTTP
Información de contacto: QQ: 564628276 Correo electrónico: [email protected] Wechat: Sylar-yin QQ Group: 8151915 (Sylar Technology Group) Página de inicio personal: www.sylar.top github: https://github.com/sylar-yin/sylar