Wie schreibe ich einen Webserver in C/C++ unter Linux [closed]
Lesezeit: 4 Minuten
Jack
Ich suche nach der Entwicklung eines kleinen (sprich: rudimentären) Webservers auf einer Linux-Plattform und habe keine Ahnung, wo ich anfangen soll.
Was ich möchte, dass es kann, ist:
Hören Sie auf einem bestimmten Port
Nehmen Sie HTTP-Post und erhalten Sie Anfragen
Richtig reagieren
Keine Sitzungsverwaltung erforderlich
Muss in C oder C++ sein
Muss beim Booten als Dienst ausgeführt werden
Ich kenne mich mit HTTP-Headern aus und bin ein erfahrener PHP- und .Net-Webentwickler, aber ich bin mir nicht sicher, wo ich mit dieser Aufgabe anfangen soll.
Können Sie mir einige Ressourcen empfehlen, um die Lernkurve zu überbrücken?
Das Ausführen beim Booten hat nichts mit Ihrer Programmiersprache zu tun, Sie müssen es nur als lauffähig machen [programname] start- und stoppbar als [programname] stoppen, dann installieren Sie es nach /etc/init.d oder /etc/rc.d/ oder was auch immer.
– Brendan Lange
26. Februar 2010 um 0:55 Uhr
Danke, Brendan, kannst du erklären (oder einen Link angeben), was du in diesem Zusammenhang mit “lauffähig” meinst?
Wenn dies ein mit dem Internet verbundener Server sein soll, sollten Sie keinen eigenen schreiben. Es Wille angegriffen werden. Bestehende HTTP-Server enthalten viele Lektionen, die wir gelernt haben.
– MSalter
26. Februar 2010 um 9:02 Uhr
Ich hasse es, darüber abzustimmen, da das Schreiben eines einfachen Webservers eine meiner Lieblingsübungen in der Schule war … der einzige Weg ist, direkt einzutauchen – myserver.c zu erstellen, einen Listening-Socket zu öffnen, zu kompilieren, auszuführen und einen Browser darauf zu richten es. Schau was passiert. Iterieren.
– Andy Jones
24. Juni 2014 um 2:57 Uhr
mctylr
Von oben nach unten müssen Sie Folgendes wissen:
HTTP-Protokoll
TCP-Server – BSD-Socket-Programmierung
Schreiben eines einfachen Unix-Daemons (persistenter Dienst)
Prozessmanagement (Fork)
Parsen von Text (Lesen einer Konfigurationstextdatei)
Dateiverwaltung (I/O)
Debuggen der C / C++ Programmierung 🙂
Sie müssen sich also mit dem Schreiben einer einfachen Unix-Anwendung, der BSD-Socket-Programmierung für die TCP/IP-Netzwerkprogrammierung und dem HTTP-Protokoll vertraut machen.
Häufig verwendete Texte sind:
Entwicklung von Unix-Anwendungen:
Fortgeschrittene Programmierung in der Unix-Umgebung, Stevens & Rago
Fortgeschrittene Unix-Programmierung
TCP/IP (Sockets) Programmierung:
Unix-Netzwerkprogrammierung, Band 1 Stevens et all
plus weitere je nach Support (Komprimierung, URI/URL) und Vollständigkeit
Genau genommen sind Parsing und Forking von Konfigurationsdateien nicht notwendig.
– Billy ONeal
24. Juni 2014 um 0:30 Uhr
Für einen SIMPLE/BASIC/ULTRA-LIGHT HTTP-Server sollte der Programmablauf etwa so aussehen (in Pseudo-Code):
----Main thread----
Load settings
while true do
Wait for connection
Connection received, create a new thread and transfer this connection to this thread.
end
----Connection thread----
Analyze request
if dynamic content do
Dump the HTTP request and send it to the interpreter
Wait for response from the interpreter
Read response header from the interpreter
Stream response
else if static content do
Load requested file
Stream file content
end
(Optional) Cache the response if size < X
Send the response
Close the socket
Sie sollten also Threading, Interprozess-Kommunikation (wenn Sie mit einem Interpreter interagieren möchten), Socket-Programmierung und das HTTP-Protokoll lernen.
Sie können immer mit einer vorhandenen Codebasis beginnen. Boa kann ein Anfang sein, da es klein, in C implementiert und für Ihre ‘start on boot’-Anforderung geeignet ist; Details stehen zB im Debian/Ubuntu-Paket.
Das Ausführen beim Booten hat nichts mit Ihrer Programmiersprache zu tun, Sie müssen es nur als lauffähig machen [programname] start- und stoppbar als [programname] stoppen, dann installieren Sie es nach /etc/init.d oder /etc/rc.d/ oder was auch immer.
– Brendan Lange
26. Februar 2010 um 0:55 Uhr
Danke, Brendan, kannst du erklären (oder einen Link angeben), was du in diesem Zusammenhang mit “lauffähig” meinst?
– Jack
26. Februar 2010 um 0:57 Uhr
Brendan versucht, a zu erklären Unix-Daemon, ähnlich dem, was unter MS-Windows als Service bezeichnet wird. Ref (mit Codefragmenten): netzmafia.de/skripten/unix/linux-daemon-howto.html
– mctylr
26. Februar 2010 um 1:51 Uhr
Wenn dies ein mit dem Internet verbundener Server sein soll, sollten Sie keinen eigenen schreiben. Es Wille angegriffen werden. Bestehende HTTP-Server enthalten viele Lektionen, die wir gelernt haben.
– MSalter
26. Februar 2010 um 9:02 Uhr
Ich hasse es, darüber abzustimmen, da das Schreiben eines einfachen Webservers eine meiner Lieblingsübungen in der Schule war … der einzige Weg ist, direkt einzutauchen – myserver.c zu erstellen, einen Listening-Socket zu öffnen, zu kompilieren, auszuführen und einen Browser darauf zu richten es. Schau was passiert. Iterieren.
– Andy Jones
24. Juni 2014 um 2:57 Uhr