Eine Implementierung des HTTP -Servers basierend auf C ++ 11 , das einfach eine CGI -Instanz hinzufügen kann. Es kann statische Ressourcen umgehen, HTTP -lange Verbindungen und so weiter unterstützen. Wir implementieren auch das asynchrone Protokoll, um den Status des Servers aufzuzeichnen.
Testseite: BeispielPlecgi, Logincgi und UploadCGI
a) So kompilieren Sie Quelldateien in binäre ausführbare Ausführungen (im Stammordner)
bash install.shb) Führen Sie das Programm aus (im Build -Ordner).
cd build
./httpcgiservermaina) Schreiben Sie eine CGI -Instanzklasse, die die Basecgi -Klasse wie BeispielPlecgi erbt.
b) Fügen Sie die CGI -Instanz in den CGIinstanceFactory hinzu.
c) Fügen Sie die Header -Datei in den CGIHeader hinzu.
d) Ändern Sie die cmakelists.txt.
e) dann bauen und rennen.
Das Testergebnis von Webbench wird hier angezeigt.
Eine kurze Übersicht über die Implementierung finden Sie im Impldoc.md. Anleitung zu Header -Dateien:
Basis/log.h -Schnittstelle für Protokollsystem, das aus asynchronem Protokoll stammt.
epoller.h capsulate verwandte Funktionen von Epoll.
netutil.h capsulate verwandte Funktionen von Socket Fd.
SimpleBuffer.h Application Layer Puffer (wir implementieren jetzt nur noch das LT -Modell).
Channel.h Capsulate Channel (Ereignis) verwandte Rückruffunktionen (Lese-/Schreib-/Fehlerfunktionen).
Minheap.h verwenden Sie Min Heap, um die abgelaufene Verbindungszeit zu verwalten.
EventLoop.h es verwaltet den Kanal (Ereignis), der dem Epoller registriert wird, und verarbeitet die aktiven Kanäle (Ereignisse).
EventLoopThread.H Es verwaltet eine Verbindungswarteschlange und die Haupt -Akzeptanz -Thread -Push -Verbindungssocket FD in der Warteschlange, dann fügen Sie den Socket -FDS zu seinem EventLoop hinzu.
EventLoopThreadpool.H Es verwaltet mehrere Threads, die Haupt -Akzeptanz -Thread -Push -Verbindungs -Socket FD in den Threadpool und schickt den Socket in seine Fäden.
tcpServer.h Annahme von Verbindungssocket FD und wenn ein Leseereignis in der Verbindungsbuchse passiert, wird der Byte -Stream automatisch in den Anwendungspuffer des Kanals gelesen und die Read -Callback -Funktion ausgeführt. Das gleiche wie Schreib- und Fehlerereignisse hunsch.
httpMessage.h die HTTP -Anfrage analysieren, erstellen Sie die HTTP -Antwortnachricht. Hier verwenden wir eine Statusmaschine, um HTTP -Anforderungen zu verarbeiten.
Basicgi.h die abstrakte Klasse der CGI -Instanzklasse. Es bietet eine Prozessoberfläche und wir verwenden sie, um die CGI -Anforderung zu verarbeiten.
IncludecgiHeader.h enthalten die CGI -Instanzklasse, die für CGIDispatch verwendet wird.
cgidispatch.h Der CGI -Dispatcher, der die URL verwendet, um die CGI -Instanz zu finden, um das CGI -Programm auszuführen.
httpcgiserver.h Wenn das Lesen von Ereignis happend ist, analysiert es zunächst die HTTP -Anforderung im Anwendungspuffer des Kanals, findet dann die CGI -Instanz und verarbeitet die Anfrage.
httpcgiservermain.cpp HTTP Server Main.
BeispielPlecgi/evitcgi.h und logincgi/logincgi.h Beispiel dafür, wie eine CGI -Instanzklasse geschrieben wird. Webfile/Login enthält die von der Logincgi -Klasse benötigten .html-, .js-, .css -Dateien.