pequeñoservidorweb
El servidor web liviano C ++ en Linux ayuda a los principiantes a practicar rápidamente la programación de redes y construir su propio servidor.
- Modelo de concurrencia que utiliza grupo de subprocesos + socket sin bloqueo + epoll (implementado por ET y LT) + procesamiento de eventos (implementado por Reactor y Proactor simulado)
- Utilice la máquina de estado para analizar mensajes de solicitud HTTP, admita el análisis de solicitudes GET y POST
- Acceda a la base de datos del servidor para implementar funciones de registro e inicio de sesión de usuarios web, y puede solicitar imágenes y archivos de video del servidor
- Implementar un sistema de registro sincrónico/asincrónico para registrar el estado de ejecución del servidor.
- Después de la prueba de estrés de Webbench , se pueden lograr decenas de miles de intercambios de datos de conexión simultáneos
escribir delante
- Durante el desarrollo y mantenimiento de este proyecto, se ofrecieron sobres rojos a muchos zapatos para niños para apoyarme, pero los rechacé todos. No empaquetaré, ni lo haré en el futuro, este proyecto en ningún curso para la venta, ni abriré ningún canal de soporte.
- En la actualidad, hay personas en Internet que empaquetan este proyecto o el proyecto de Youshuangdao en cursos para la venta. Mantenga los ojos bien abiertos e identifique los proyectos de servidor C++ de los principales sitios web de aprendizaje/búsqueda de empleo, y no pague a ciegas.
- Un entrevistador senior me encontró en la empresa a través de información del proyecto y descubrió que los currículums de muchos niños utilizaban este proyecto. Sin embargo, durante el proceso de entrevista, descubrí que
很多童鞋通过本项目入门了,但是对于一些东西还是属于知其然不知其所以然的状态,需要加强下基础知识的学习
. .- "Programación avanzada en entorno Unix"
- "programación de red unix"
- Gracias a todos los patrones, amigos y calzado infantil por su reconocimiento y apoyo. Sería un gran honor para mí si este proyecto pudiera ayudarle a comenzar.
Tabla de contenido
Descripción general | marco | Manifestación | prueba de estrés | Registro de cambios | Descarga del código fuente | Corre rapido | Operación personalizada | Cocinero Ding Jie Niu | Implementación del CPP11 | Expresiones de gratitud |
---|
Descripción general
- C/C++
- modelo B/S
- Clase contenedora del mecanismo de sincronización de subprocesos
- clase de procesamiento de solicitudes de conexión http
- Grupo de subprocesos semisíncrono/semi-reactor
- Temporizador para manejar conexiones inactivas
- Sistema de registro síncrono/asincrónico
- Grupo de conexiones de base de datos
- Registro de subprocesos sincrónicos y verificación de inicio de sesión
- Prueba de estrés del servidor simple
marco
Manifestación
- Regístrese para una demostración
- Iniciar sesión demostración
- Solicitar demostración de archivo de imagen (6M)
- Solicitar demostración de archivo de vídeo (39M)
prueba de estrés
Después de cerrar el registro, use Webbench para realizar una prueba de esfuerzo en el servidor. Utilice los modos ET y LT para listeningfd y connfd respectivamente. Ambos pueden lograr decenas de miles de conexiones simultáneas. A continuación se enumeran los resultados de la prueba después de la combinación de los dos.
- Proactor, LT + LT, 93251 QPS
- Proactor, LT + ET, 97459 QPS
- Proactor, ET + LT, 80498 QPS
- Proactor, ET + ET, 92167 QPS
- Reactor, LT + ET, 69175 QPS
- Número total de conexiones simultáneas: 10500
- Tiempo de acceso al servidor: 5s
- Todos los accesos fueron exitosos.
Nota: Cuando utilice webbench de este proyecto para pruebas de estrés, si un mensaje de error muestra que no se puede encontrar el comando webbench, elimine el archivo ejecutable webbench y vuelva a compilarlo.
Registro de cambios
Descarga del código fuente
Actualmente hay dos versiones. Hay cambios importantes en la estructura del código entre versiones y la documentación y los métodos de ejecución del código también son inconsistentes. La versión refactorizada es más concisa y la versión original (raw_version) es más grande, conserva el sabor original del código Youshuang y es más fácil comenzar con la versión original.
Si no puede descargar el código de Github o el acceso es demasiado lento, puede descargarlo desde el siguiente enlace y sincronizarlo con el último envío de Github.
- Dirección de descarga de la versión refactorizada: BaiduYun
- Código de extracción: vsqq
- Dirección de descarga de la versión original (raw_version): BaiduYun
- Código de extracción: 9wye
- Para ejecutar la versión original, consulte la documentación original.
Corre rapido
Entorno de prueba del servidor
- Ubuntu versión 16.04
- MySQL versión 5.7.29
Entorno de prueba del navegador
- Tanto Windows como Linux están disponibles.
- Cromo
- zorro de fuego
- Aún no hay pruebas en otros navegadores
Asegúrese de que la base de datos MySQL esté instalada antes de realizar la prueba.
// 建立yourdb库
create database yourdb;
// 创建user表
USE yourdb;
CREATE TABLE user (
username char ( 50 ) NULL,
passwd char( 50 ) NULL
)ENGINE=InnoDB;
// 添加数据
INSERT INTO user (username, passwd) VALUES( ' name ' , ' passwd ' );
Modifique la información de inicialización de la base de datos en main.cpp
//数据库登录名,密码,库名
string user = " root " ;
string passwd = " root " ;
string databasename = " yourdb " ;
construir
Iniciar servidor
Lado del navegador
Operación personalizada
./server [-p port] [-l LOGWrite] [-m TRIGMode] [-o OPT_LINGER] [-s sql_num] [-t thread_num] [-c close_log] [-a actor_model]
Recordatorio: los parámetros anteriores no son necesarios, no es necesario que los utilice todos, puede elegirlos según su situación personal.
- -p, número de puerto personalizado
- -l, seleccione el método de escritura de registros, el valor predeterminado es escritura sincrónica
- 0, escritura sincrónica
- 1. Escritura asincrónica
- -m, combinación de modos de listeningfd y connfd, el valor predeterminado es LT + LT
- 0, significa usar LT + LT
- 1, significa usar LT + ET
- 2, significa usar ET + LT
- 3, significa usar ET + ET
- -o, cierra la conexión con gracia, no se usa de forma predeterminada
- -s, número de conexiones a la base de datos
- El valor predeterminado es 8
- -t, número de hilos
- El valor predeterminado es 8
- -c, cierra el registro, abre por defecto
- 0, abre el registro
- 1. Cierra el registro
- -a, selecciona el modelo del reactor, el predeterminado es Proactor
- 0, modelo proactor
- 1. modelo de reactor
Comandos y significados de ejemplo de prueba
./server -p 9007 -l 1 -m 0 -o 1 -s 10 -t 10 -c 1 -a 1
Cocinero Ding Jie Niu
La iteración de la versión reciente es más rápida y el siguiente contenido se basa principalmente en el código de la versión anterior (raw_version) para una explicación detallada.
- La perspectiva de un novato: comprenda el TinyWebServer del presidente en un artículo
- Explicación detallada de la última versión del proyecto del servidor web: 01 Clase de encapsulación del mecanismo de sincronización de subprocesos
- Explicación detallada de la última versión del proyecto del servidor web: 02 Grupo de subprocesos de semirreactor semisincrónico (Parte 1)
- Explicación detallada de la última versión del proyecto del servidor web: 03 Grupo de subprocesos de semirreactor semisincrónico (Parte 2)
- Explicación detallada de la última versión del proyecto del servidor web: 04 Procesamiento de conexión http (Parte 1)
- Explicación detallada de la última versión del proyecto del servidor web: 05 procesamiento de conexión http (Parte 2)
- Explicación detallada de la última versión del proyecto del servidor web: 06 Procesamiento de conexión http (Parte 2)
- Explicación detallada de la última versión del proyecto del servidor web - 07 Procesamiento por temporizador de conexiones inactivas (Parte 1)
- Explicación detallada de la última versión del proyecto del servidor web - 08 Procesamiento por temporizador de conexiones inactivas (Parte 2)
- Explicación detallada de la última versión del proyecto del servidor web - 09 Sistema de registro (Parte 1)
- Explicación detallada de la última versión del proyecto del servidor web: 10 Sistema de registro (Parte 2)
- Explicación detallada de la última versión del proyecto del servidor web: 11 Grupo de conexiones de base de datos
- Explicación detallada de la última versión del proyecto del servidor web - 12 Regístrate e inicia sesión
- Explicación detallada de la última versión del proyecto de servidor web: 13 trampas y preguntas de la entrevista
- Actualizado
Historia de las estrellas
Implementación del CPP11
Una implementación de CPP11 más simple y elegante: Webserver
Expresiones de gratitud
Programación de servidor de alto rendimiento Linux, escrita por You Shuang.
Gracias a los siguientes amigos por las relaciones públicas y la ayuda: @RownH, @mapleFU, @ZWiley, @zjuHong, @mamil, @byfate, @MaJun827, @BBLiu-coder, @smoky96, @yfBong, @liuwuyao, @Huixxi, @markparticle , @blogg9ggg.