Une implémentation du serveur HTTP basé sur C ++ 11 , qui est facilement pour ajouter une instance CGI. Il peut gérer les ressources statiques, prendre en charge les connexions longues HTTP, etc. Nous implémentons également le journal asynchrone pour enregistrer l'état du serveur.
Page de test: examplecgi, logincgi et uploadcgi
a) Pour compiler les fichiers source dans les exécutables binaires (dans le dossier racine)
bash install.shb) Exécutez le programme (dans le dossier de construction)
cd build
./httpcgiservermainA) Écrivez une classe d'instance CGI, qui hérite de la classe Basecgi, comme examplecgi.
b) Ajoutez l'instance CGI dans le CGIInstanceFactory.
c) Ajoutez le fichier d'en-tête dans le CGIHeader.
d) Modifier le cMakelists.txt.
e) puis construire et courir.
Le résultat du test par Webbench est illustré ici.
Voir IMPLDOC.MD pour un bref aperçu de la mise en œuvre. Guide des fichiers d'en-tête:
Interface de base / log.h pour le système de journal, qui provient du journal asynchrone.
Epoller.h encapsuler les fonctions connexes d'Epoll.
netutil.h encapsuler les fonctions connexes du socket fd.
tampon de couche d'application SimpleBuffer.H (nous ne mettons en œuvre que le modèle LT maintenant).
Channel.h Fonctions de rappel liées à canal (événement) (fonctions de lecture / écriture / erreur).
Minheap.h Utilisez Min Heap pour gérer le temps de connexion expiré.
eventloop.h Il gère le canal (événement), qui est régisté à l'Epoller et traite les canaux actifs (événements).
EventLoopThread.h gère une file d'attente de connexion, et le socket de connexion de filetage d'acceptation principale FD dans la file d'attente, puis ce thread ajoute le socket fds à son EventLoop.
EventLoopThreadpool.h gère plusieurs threads, le socket de connexion de filetage d'acceptation principale FD dans le threadpool, il envoie la prise sur ses threads.
tcpServer.h accepter le socket de connexion FD, et lorsqu'un événement de lecture se présente sur la prise de connexion, il a automatiquement lu le flux d'octet dans le tampon d'application du canal et exécute la fonction de rappel de lecture. La même chose que les événements d'écriture et d'erreur se sont satisfaits.
httpMessage.h analyse la demande http, construire le message de réponse http. Ici, nous utilisons une machine d'état pour traiter les demandes HTTP.
Basecgi.h la classe abstraite de la classe d'instance CGI. Il fournit une interface de processus, nous l'utilisons pour traiter la demande CGI.
includecgiHeader.h inclut la classe d'instance CGI, qui est utilisée pour CGIDispatch.
cgidispatch.h Le répartiteur CGI, qui utilise l'URL pour trouver l'instance CGI, pour exécuter le programme CGI.
httpcgiserver.h Lorsque l'événement de lecture s'est heureux, il analyse d'abord la demande HTTP dans le tampon d'application du canal, puis trouve l'instance CGI et traite la demande.
httpcgiservermain.cpp http serveur main.
examplecgi / examplecgi.h et logincgi / logincgi.h Exemple de la façon d'écrire une classe d'instance CGI. WebFile / Login inclut les fichiers .html, .js, .css nécessaires à la classe Logincgi.