Was benötige ich für die C++-Programmierung von dynamischen Websites?
-
Steve6 schrieb:
- Gibt es Literatur oder gute Quellen im Netz zur Web-Programmierung in C++? Ich habe bisher den Eindruck, dass die meisten Leute in PHP fürs Web entwickeln und C++ hier nur ein Nischendasein fristet. Ich kann mich aber irren.
Literatur hab ich nicht, aber man kann durchaus mit C++ für's Web entwickeln, allerdings weiß ich nicht, wie komfortabel es ist, siehe selbst: www.tntnet.org.
-
Steve06 schrieb:
- Geht der HTML-Output der Exe einfach an die Standardausgabe (stdio) oder was muss ich beachten, damit das Ergebnis im Browser erscheint?
Hallo,
ich mache soetwas auch lieber mit C++, wenn ich keinen PHP Processor installieren möchte.
1. Wenn ich Informationen in Webseiten einbetten möchte, dann lasse ich die Binary über STDIN eine normale HTML Seite zeilenweise einlesen und unverändert über STDOUT wieder ausgeben. Es sei denn, es tritt die Zeile <!-- ### --> auf, dann wird die Zeile mit vom C++ errechneten Informationen ersetzt. Eine semi-statische Webseite, wenn man so will. (Im Prinzip ist es genau das, was auch PHP macht. Nur leichtgewichtiger.)
Dem Webserverprogramm musst du natürlich sagen, dass es über CGI deine Binary aufrufen soll, wenn ein bestimmter Link besucht wird und dass die Roh-Webseite übergeben werden soll (als STDIN). Der Webserver sendet dann den Output von STDOUT automatisch an den Webbrowser zurück.
2. Natürlich ist die Aktion der C++ Binary nicht auf Parsen und Ersetzen beschränkt, wobei selbstverständlich Sicherheitsaspekte zu beachten sind.
(Der Eingabe ist grundsätzlich zu misstrauen und sie muss mit den erlaubten Aktionen abgeglichen werden.)3. Wenn ein komplizierteres Wechselspiel zwischen Webserver und Browser realisiert werden soll, dann bette ich einen einfachen HTTP Server direkt in das C++ Binary ein. So kann ich auf einen externen Webserver verzichten.
Das ist insbesondere dann ratsam, wenn nicht jeder Request auf eine HTML Datei zugreifen soll, sondern die HTML Seite vollständig dynamisch auf dem Server generiert weren soll und man viele Parameter über die Seite einstellen können soll. (Denke da z.B. daran, wie man einen Router konfiguriert.)Ich verwende dafür:
- http://www.lighttpd.net/ als externen Webserver
- http://gnunet.org/libmicrohttpd/ wenn HTTP Server eingebettet werden soll
-
Das IMHO der beste C++ Compiler für Windows.
Hüstl. Das ist stark anzuzweifeln. Es gibt wesentlich bessere (allerdings auch kostenplichtige).
Der BCB 2007 ist zur Zeit dem Visual Studio in zahlreichen Dingen überlegen.
-
Eine andere Alternative sind ISAPI-DLLs für den IIS6.0, welcher standardmäßig beim Windows-Server mit dabei ist. Diese ISAPI-DLLs kann man z.B. mit dem BCB6 (wahrscheinlich auch mit BCB 2007) erstellen. Hier mal ein Beispiel, allerdings mit Delphi/Pascal erstellt, ist aber beim BCB vom Vorgehen her identisch.
-
Badestrand schrieb:
Steve6 schrieb:
- Gibt es Literatur oder gute Quellen im Netz zur Web-Programmierung in C++? Ich habe bisher den Eindruck, dass die meisten Leute in PHP fürs Web entwickeln und C++ hier nur ein Nischendasein fristet. Ich kann mich aber irren.
Literatur hab ich nicht, aber man kann durchaus mit C++ für's Web entwickeln, allerdings weiß ich nicht, wie komfortabel es ist, siehe selbst: www.tntnet.org.
Danke für den Hinweis
.
Ich sollte ergänzen, daß Tntnet nicht unter Windows läuft. Und Visual Studio unterstützt Tntnet auch nicht. Dafür ist Tntnet sehr schnell und die Entwicklung von Applikationen nicht so schwer.
@Steve06: Wenn Du C++ nimmst, weil es schneller als PHP ist, warne ich vor CGI, also ein System, welches die HTML-Ausgaben auf seine Standardausgabe erzeugt. Da wird für jeden Request ein neuer Prozess gestartet und da ist selbst PHP deutlich schneller, als CGI, egal, mit welcher Sprache Du die CGI-Programme machst.
Die Lösung ist, einen Webserver in dein C++-Programm zu integrieren, ein Modul für einen Webserver zu schreiben oder eben ein System wie Tntnet nutzen, welcher von sich aus Webapplikationen mit C++ unterstützt.
-
Vielen Dank für die vielen Antworten, ihr habt mir schon ein großes Stück weitergeholfen.
Mein Resümée:
- C++ sollte ich nicht über eine CGI laufen lassen, was zwar direkt über die Standardausgabe funktioniert, aber langsam ist
- Am besten ist ein in der C++ binary enthaltener "Webserver", wie etwa tntnet (habe mir die Seite angeschaut und sieht recht interessant aus); wo finde ich eine Doku zu den Anforderungen an einen solchen Webserver, etwa wenn man einen eigenen basteln möchte? Die App muss auf jeden Fall multi-threading-fähig sein um viele simultane Anfragen bedienen zu können.
- tntnet läuft z.B. nicht auf Windows. Auch sind Apache Server viel verbreiteter (und somit vermutlich kostengünstiger in der Miete) und kommen besser mit hoher Belastung zurecht als Windows-Server. Welche Entwicklungsumgebung wäre dann ratsam? Sollte ich dann etwa auf einem Windows-PC eine Linux/Apache-Partition einrichten, um dort die Programme zu schreiben und zu testen?
- Was passiert, wenn das Programm oder ein Thread abstürzt? Kann es sich dann von alleine wieder in Gang setzen oder wird ein Admin-Eingriff benötigt?Gruß und Dank
Steve
-
Steve06 schrieb:
- C++ sollte ich nicht über eine CGI laufen lassen, was zwar direkt über die Standardausgabe funktioniert, aber langsam ist
Naja, langsam im Sinne von nicht mehr als zig Aufrufe pro Sekunde.
Es gibt auch noch FastCGI. Wenn Geschwindigkeit so wichtig ist, muss es denn überhaupt Apache sein?
Z.B. benutzt Youtube lighttpd mit fastcgi und ich bin mir ziemlich sicher, dass die einiges an simultanen Verbindungen bedienen müssen.Steve06 schrieb:
Sollte ich dann etwa auf einem Windows-PC eine Linux/Apache-Partition einrichten, um dort die Programme zu schreiben und zu testen?
Ja.
Steve06 schrieb:
- Was passiert, wenn das Programm oder ein Thread abstürzt? Kann es sich dann von alleine wieder in Gang setzen oder wird ein Admin-Eingriff benötigt?
Man kann dafür Watchdogs benutzen. Das sind Programme, die periodisch prüfen, ob der Prozess noch läuft und ihn dann ggf. neu starten.
-
GNU-Fan schrieb:
Steve06 schrieb:
- C++ sollte ich nicht über eine CGI laufen lassen, was zwar direkt über die Standardausgabe funktioniert, aber langsam ist
Naja, langsam im Sinne von nicht mehr als zig Aufrufe pro Sekunde.
Es gibt auch noch FastCGI. Wenn Geschwindigkeit so wichtig ist, muss es denn überhaupt Apache sein?Was wäre die schnellere Alternative?
-
Hab' ich dir doch oben schon verlinkt.
-
GNU-Fan schrieb:
Hab' ich dir doch oben schon verlinkt.
Ja, hab schon gelesen, liest sich sehr interessant als Alternative zum Apache.
-
Wenn ich schon mal so viele kompetente Leute auf einem Haufen habe würde ich gerne mal nachfragen:
Welches C++-Entwicklungsumgebungen gibt es für Linux-Systeme und empfehlt ihr?
Und: welche Linux-Distributionen (Debian, openSUSE, Ubuntu etc.) würdet ihr für solche C++-Webprojekte empfehlen?
-
Ich habe ein Debian Stable als Basissystem und habe mir die aktuellste Version von NetBeans installiert.