Uma implementação do servidor HTTP com base no C ++ 11 , que é facilmente adicionar uma instância CGI. Ele pode lidar com recursos estáticos, suportar conexões longas HTTP e assim por diante. Também implementamos o log assíncrono para registrar o status do servidor.
Página de teste : Exemplecgi, Logincgi e Uploadcgi
a) Para compilar arquivos de origem em executáveis binários (na pasta raiz)
bash install.shb) Execute o programa (na pasta Build)
cd build
./httpcgiservermaina) Escreva uma classe de instância CGI, que herda a classe Basecgi, como o ExampleCGI.
b) Adicione a instância do CGI ao CGIInstanceFactory.
c) Adicione o arquivo de cabeçalho ao CGIHEADER.
d) modifique os cmakelists.txt.
e) Em seguida, construa e corra.
O resultado do teste do Webbench é mostrado aqui.
Consulte ImplDoc.md para obter uma breve visão geral da implementação. Guia para arquivos de cabeçalho:
interface base/log.h para o sistema de log, que é do log assíncrono.
epoller.h encapsula funções relacionadas do epoll.
netutil.h encapsula funções relacionadas do soquete FD.
Buffer de camada de aplicativo SimpleBuffer.H (implementamos apenas o modelo LT agora).
Channel.h encapsula funções de retorno de chamada relacionadas ao canal (evento) (funções de leitura/gravação/erro).
MINNHEAP.H Use Min Heap para gerenciar o tempo expirado da conexão.
Eventloop.h ele gerencia o canal (evento), que é registrado no epoller, e processa os canais ativos (eventos).
EventloOpthread.h Ele gerencia uma fila de conexão, e o encadeamento principal Push Thread Push Connection Socket FD na fila; em seguida, esse thread adicione o soquete FDS ao seu Eventloop.
EventloOpthreadpool.h Ele gerencia vários threads, o thread principal Push Socket Socket FD no ThreadPool, despacha o soquete para seus threads.
tcpServer.h Aceite o soquete de conexão FD e, quando um evento de leitura acontece no soquete da conexão, ele lê automaticamente o fluxo de bytes no buffer de aplicativo do canal e execute a função de retorno de chamada leitura. O mesmo que os eventos de gravação e erro acontecem.
httpmessage.h Analise a solicitação HTTP, Build HTTP Responder Mensagem. Aqui, usamos uma máquina de estado para processar solicitações HTTP.
BASECGI.H A classe abstrata da classe CGI instância. Ele fornece uma interface de processo, usamos para processar a solicitação CGI.
IncluirCgiHeader.
CGIDISPATCH.H O DISPACHER CGI, que usa o URL para encontrar a instância do CGI, para executar o programa CGI.
httpcgiserver.h Quando o evento de leitura acontece, ele analisa primeiro a solicitação HTTP no buffer de aplicativo do canal, encontra a instância do CGI e processa a solicitação.
httpcgiservermain.cpp http servidor principal.
ExemplecGi/Exemplecgi.h e Logincgi/logincgi.h Exemplo de como gravar uma classe CGI Instância. Webfile/Login inclui os arquivos .html, .js, .css necessários para a classe Logincgi.