[C] Sourcecode primitiver Webserver

Hallo, könnt ihr mir eine Adresse empfehlen o.ä. wo ich den Sourcecode für einen sehr einfachen Webserver finde, vorzugsweise in C / C++ geschrieben, aber nicht auf spezielle Umgebungen angewiesen. Sollte letztlich unter Linux laufen.

Hintergrund: ich möchte einen daemon schreiben, der nicht viel kann, ausser alle Requests an seine Adresse abfangen und eine leicht abgewandelte Seite je nach Parameter bzw. gefordertem Pfad ausgibt. Das Ding soll extrem schnell sein, deswegen denke ich nicht an Lösungen wie normale Webserver, Perl/PHP/wasweissichwas, mysql Datenbank etc. Sondern ich will dass der Deamon einen Haufen Speicher ständig allokiert hat in dem er alle wichtigen Daten cached die ständig abgefragt werden, so dass ich nicht dauernd auf langsame SQL-Abfragen bei jedem zugriff lande.

Bruno

Hallo Bruno,

vielleicht ist http://www.goahead.com/webserver/wsover.htm etwas für dich?

Viel Erfolg
Michael

So auf den ersten Blick ist mir das schon viel zu umfangreich *smile*
Ich brauch nix mit CGI oder sonstwas, genausowenig wie Security. Das Ding muss nichtmal Grafiken an den Browser senden können, sondern einfach auf ein Request hin einen bestimmten im Server hart einkodierten HTML-Code ausprinten. Es gibt also kein DocumentRoot oder sowas. Das Ding sol nur eine gewisse Abfrage abfangen, für den Rest werde ich noch nen vernünftigen anderen Webserver (Apache) laufen lassen.

Bruno

Das würde ich selber schreiben. Eine kleine Serveranwendung die auf irgendeinem Port wartet findest du als Beispiel in zig Socket-Tutorials, dann mußt du nur noch die paar HTTP-Befehle die du brauchst implementieren, vermutlich eh nur GET (schau dir da mal das HTTP RFC an).

Grüße, Robert

Jep, so dacht ich mir das auch schon…
hast du zufällig auch noch ein Tutorial zur Hand? auf die Schnelle hab ich leider nichts gutes gefunden, aber ich werd ma intensiver suchen.
Und mir is da gestern so die Idee gekommen, dass ich das Ding wohl multi-threaded schreiben muss, oder? Gleichzeitige Zugriffe müssen drin sein… (deswegen auch meine Frage zu Multithreading weiter oben).
Ich werd auch mal in die Source von Apache oder so nen BLick werfen, aber ich bezweifel dass ich da so richtig draus schlau werden werde. :smile:

Bruno

hast du zufällig auch noch ein Tutorial zur Hand?

Sorry, nur für Windows/Winsock.

Und mir is da gestern so die Idee gekommen, dass ich das Ding
wohl multi-threaded schreiben muss, oder?

Jo, wohl oder übel. Du könntest dir überlegen das Ganze in Java zu machen, da sind sowohl die Sockets als auch das Multithreading um einiges simpler als in C/C++ (zumindest als die entsprechenden MFCs, aber ich nehme an, dass Linux da auch nicht viel komfortabler ist).

Ich werd auch mal in die Source von Apache oder so nen BLick
werfen, aber ich bezweifel dass ich da so richtig draus schlau
werden werde. :smile:

Jo, das ist eines von den Dingen wo man mal kurz „Huch“ sagt und das ganze dann wieder zumacht. :smile:

Grüße, Robert

Jo, wohl oder übel. Du könntest dir überlegen das Ganze in
Java zu machen

Eine Überlegung ists zumindest wert :smile: zur Zeit bin ich ganz zufrieden mit Java, obwohl man sonst andauernd hört „lahm“.

Ich werd auch mal in die Source von Apache oder so nen BLick
werfen, aber ich bezweifel dass ich da so richtig draus schlau
werden werde. :smile:

Jo, das ist eines von den Dingen wo man mal kurz „Huch“ sagt
und das ganze dann wieder zumacht. :smile:

Ich werd mir vielleicht auch mal das Konzept der Apache Modules genauer anschauen, vielleicht kann ich mein Ding ganz einfach als Modul in den Apache integrieren .

Bruno

Eine Überlegung ists zumindest wert :smile: zur Zeit bin ich ganz
zufrieden mit Java, obwohl man sonst andauernd hört „lahm“.

Ich weiß nicht wie es mit Swing und so steht, aber bei reinen Kommandozeilen-Programmen stimmt das seit JIT eigentlich nicht mehr.

Grüße, Robert

äääh sorry, was is JIT ? is das ein Native-Code-Compiler?

Bruno

äääh sorry, was is JIT ? is das ein Native-Code-Compiler?

Steht für Just In Time oder so, läuft sich auf Native Code raus, er interpretiert/kompiliert den ByteCode nur einmal und behält dann den Maschinencode im Speicher.

Weiß nicht bei welcher Version das eingeführt wurde, aber das macht die normale VM von Sun schon seit einiger Zeit so.

Grüße, Robert