Wie schreibe ich einen Webserver in C/C++ unter Linux [closed]

Lesezeit: 4 Minuten

Jacks Benutzeravatar
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?

    – 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

Benutzeravatar von mctylr
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
  • TCP/IP illustriert, Stevens
  • Internetvernetzung mit TCP/IP, Band 3, Comer

HTTP-Protokoll

  • RFCs inkl
  • RFC 2616 für HTTP v1.1,
  • RFC 2068 für vor v1.1
  • 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.

Alle Details können hier nicht erklärt werden
Besuch http://www.linuxhowtos.org/C_C++/socket.htm zum Erstellen eines Basisservers mit C.
Noch eins von IBM: http://www.ibm.com/developerworks/systems/library/es-nweb/index.html

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.

http://en.wikipedia.org/wiki/Comparison_of_lightweight_web_servers

Nochmals vielen Dank Wikipedia

Übrigens – vielleicht möchten Sie “Embedded Web Server Open Source” googeln

(www.ibm.com/developerworks/web/library/wa-ltwebserv/

  • Link funktioniert nicht

    – Austin

    28. April 2018 um 6:27 Uhr

Mit der libevent-Bibliothek können Sie einen Webserver in 40 Zeilen C-Code schreiben.

http://www.ruilog.com/article/view/5249.html

Wenn Sie es von Grund auf erstellen möchten, können Sie auf Open-Source-Webserver verweisen, die in c geschrieben sind, wie lighttpd, Apache, nginx.

  • Link funktioniert nicht

    – Austin

    28. April 2018 um 6:27 Uhr

1393580cookie-checkWie schreibe ich einen Webserver in C/C++ unter Linux [closed]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy