Nachdem ich hier ein wenig gesucht habe, habe ich fast keine Fragen zur Entwicklung eines Webservers gefunden.
Ich werde das hauptsächlich aus zwei Gründen tun. Als Nebenprojekt und um mehr über die Entwicklung eines Serverprogramms zu erfahren. Dies wird nicht zu einer brauchbaren Anwendung, sondern eher zu einem Lernwerkzeug
Die Fragen sind also einfach.
Links zu hilfreichen Seiten sind willkommen, aber verlinken Sie nicht auf ein funktionierendes Projekt, das Open Source ist, da es sich um den Lernprozess handelt.
Ein Webserver beginnt als ein sehr einfaches Stück Code:
So ist der Umriss des Codes einfach.
Nun müssen Sie einige Schwierigkeiten bewältigen:
Die Handhabung von mehreren Verbindungen ist ebenfalls relativ einfach und bietet eine Reihe von Möglichkeiten.
Das Ausführen eines Programms ist eigentlich auch ziemlich einfach. Im Allgemeinen definieren Sie einen speziellen Pfad zu einem CGI-Verzeichnis. Eine URL mit einem Pfad durch dieses Verzeichnis interpretiert dann den Pfadnamen als Pfad zu einem Programm. Der Server würde dann mit fork / exec einen Subprozess erstellen, wobei STDOUT mit dem Socket verbunden ist. Das Programm wird ausgeführt, sendet die Ausgabe an STDOUT und es wird an den Client-Browser gesendet.
Dies ist das Grundmuster; Alles andere, was ein Web-Server tut, fügt einfach nur Schnickschnack und zusätzliche Funktionalität zu diesem Grundmuster hinzu.
Hier sind einige andere Quellen für Beispielcode:
Es tut ziemlich viel nichts von dem, was Sie wirklich wollten, aber für einfach ist es schwer zu schlagen dieses von Ссылка :
$ python -m SimpleHTTPServer
Erstens, lasst es nicht zu einem brauchbaren Projekt werden - es ist wirklich schwer, Sicherheitsrechte für Webserver zu bekommen.
Ok, hier sind Dinge zu beachten:
Viel Glück - das ist ein höllischer Job.
Die Vernetzung und andere sind ziemlich normal, also mach dir keine Sorgen darüber. (Es gibt mehrere "Instant" -Netzwerkserver in fast allen Sprachen.)
Konzentrieren Sie sich stattdessen auf die tatsächliche Implementierung der HTTP-Spezifikation. Sie werden erstaunt sein über a) was Sie nicht wissen und b) wie viel Dinge, die HTTP-konform sein sollen, wirklich nicht sind, aber täuschen Sie es vor.
Dann werden Sie sich wundern, dass das Web überhaupt funktioniert.
Wenn Sie mit HTTP fertig sind, versuchen Sie, IMAP zu implementieren.
Ich habe vor ein paar Jahren einen leichten Webserver in Python geschrieben, auch als Lernprojekt.
Der einfachste Ratschlag, den ich geben kann, insbesondere als Lernprojekt, besteht darin, einen Kern zu erstellen, der funktioniert, und dann einen iterativen Entwurf zu erstellen. Zielen Sie nicht direkt auf den Mond, fangen Sie sehr klein an, fügen Sie Attribute hinzu, verfeinern Sie und machen Sie weiter. Ich würde empfehlen, ein Tool zu verwenden, das Experimente fördert, wie Python, wo Sie Code gleichzeitig eingeben und testen können.
Der Kurs, den ich TAed hatte, hatte einen Proxy-Auftrag, so dass ich hier ein bisschen Licht werfen kann, denke ich.
Ihr werdet also am Ende eine Menge Header-Änderungen vornehmen, um euer Leben einfacher zu machen. Nämlich HTTP / 1.0 ist viel einfacher zu handhaben als HTTP / 1.1. Sie wollen sich nicht mit der Verwaltung von Timeouts und Keep-Alives und solchen Dingen beschäftigen müssen. Eine Verbindung pro Transaktion ist am einfachsten.
Du wirst viel und viel Parsing machen. Das Analysieren ist in C schwierig. Ich würde Ihnen raten, eine Funktion zu schreiben, die so etwas wie
ist %Vor%und handle es Zeile für Zeile, nur weil es am einfachsten ist, die vorhandenen C-String-Funktionen in jeweils einer Zeile zu verwenden. Denken Sie auch daran, dass Zeilen getrennt sind und Header mit einem \ r \ n \ r \ n enden.
Die Hauptsache wird das Parsen sein, solange Sie Dateien lesen können, alles andere wird wie erwartet funktionieren.
Beim Debuggen werden Sie wahrscheinlich Header ausgeben wollen, die herumgereicht werden, um sie zu testen, wenn etwas kaputt geht.
local-web-server ist ein Beispiel für einen einfachen Entwicklungs-Webserver, der in node.js geschrieben wurde. Es ist zuverlässiger und hat mehr Funktionen als python -m SimpleHTTPServer
Ich habe daran gedacht, das gleiche Projekt zu starten, um Python besser zu lernen. Es gibt eine BaseHTTPServer-Klasse , die einen guten Ausgangspunkt darstellt.
Ich habe bereits einen Webserver entwickelt, der (Html und PHP) in C-Sprache ausführt es ist nicht so kompliziert, dass Sie wissen sollten, wie man TCP / IP Sockets verwendet, Thread um mehrere Anfragen zu bearbeiten, fork (Sie müssen ein Kind für die Ausführung der PHP-Befehlszeile erstellen (ich benutzte execvp))
Ich denke, der streitlustigste Teil behandelt Zeichenfolgen in C-Sprache und sendet POST / GET-Anfragen in der Befehlszeile.
Viel Glück