Una implementación del servidor HTTP basado en C ++ 11 , que es fácilmente agregar una instancia CGI. Puede manejar recursos estáticos, admitir conexiones largas HTTP, etc. También implementamos el registro asíncrono para registrar el estado del servidor.
Página de prueba: Ejemplecgi, Logincgi y uploadCGI
a) Para compilar archivos de origen en ejecutables binarios (en la carpeta raíz)
bash install.shb) Ejecute el programa (en la carpeta de compilación)
cd build
./httpcgiservermaina) Escriba una clase de instancia CGI, que hereda la clase BASECGI, como Ej.
b) Agregue la instancia de CGI a CGIInstanceFactory.
c) Agregue el archivo de encabezado al CGIHeader.
d) Modifique las cmakelists.txt.
e) luego construir y ejecutar.
El resultado de la prueba por Webbench se muestra aquí.
Consulte ImplDoc.md para una breve descripción de la implementación. Guía de archivos de encabezado:
Base/log.h Interfaz para el sistema de registro, que es del registro asíncrono.
Epoller.h encapsulan funciones relacionadas de EPOLL.
NetUtil.h encapsulan funciones relacionadas de Socket FD.
SimpleBuffer.h Buffer de capa de aplicación (solo implementamos el modelo LT ahora).
Channel.h Encapsulate Channel (evento) Funciones de devolución de llamada relacionadas (Funciones de lectura/escritura/error).
Minheap.h Use Min Heap para administrar el tiempo de conexión vencido.
eventloop.h administra el canal (evento), que se registra en el epoller, y procesa los canales activos (eventos).
eventloopThread.h Administra una cola de conexión, y el SOCKECKET de la conexión de conexión de subproceso de aceptación principal FD en la cola, luego este hilo agrega el socket FDS a su evento EventLoop.
EventLoopThreadPool.h Administra varios subprocesos, el SOCKECKEL FD de conexión de subproceso de Aceptación principal en el threadpool, despacha el enchufe a sus roscas.
tcpserver.h Aceptar el socket de conexión FD, y cuando un evento de lectura sucede en el socket de conexión, lee automáticamente la secuencia de bytes en el búfer de aplicación del canal y ejecuta la función de devolución de llamada de lectura. Lo mismo que suceden los eventos de escritura y error.
httpmessage.h analizar la solicitud http, crear mensaje de respuesta http. Aquí, utilizamos una máquina de estado para procesar las solicitudes HTTP.
BASECGI.H La clase abstracta de la clase de instancia CGI. Proporciona una interfaz de proceso, la usamos para procesar la solicitud CGI.
includeCgiheader.h incluye la clase de instancia CGI, que se utiliza para CGIDIspatch.
cgidispatch.h El despachador CGI, que usa la URL para encontrar la instancia de CGI, para ejecutar el programa CGI.
httpcgiserver.h Cuando se leída el evento, en primer lugar analiza la solicitud HTTP en el búfer de aplicación del canal, luego encuentra la instancia de CGI y procesa la solicitud.
httpcgiservermain.cpp http servidor main.
EjemplPlecgi/Ejempplecgi.h y logincgi/logincgi.h Ejemplo de cómo escribir una clase de instancia CGI. WebFile/Login incluye los archivos .html, .js, .css necesarios por la clase Logincgi.