2012-03-27 9 views
1

Ich habe gesucht und gegoogelt, ja, ja, C++ ist nicht für das Web gedacht - genug!Web-Entwicklungsumgebung mit C++ in PHP

Ich bin auf der Suche nach einer Möglichkeit, meine Webanwendung in C++ zu schreiben, so wie PHP es behandelt - kompilieren Sie auf Anfrage.

Ich wette, es würde durch CGI getan werden, aber die Frage ist, wie richte ich solche Umgebung in zum Beispiel Apache ein?

Nehmen wir an, dass mein Dokument Wurzel hat index.cpp mit dem guten alten Hello World Beispiel:

#include <iostream> 

using namespace std; 

void main() 
{ 
    cout << "Hello World!" << endl; 
} 

Und die Anfrage an localhost/index.cpp würde Hello World zu meinem Browser am Ende zu drucken.

Dies ist nur für die Entwicklung gedacht, Produktions-App würde vorkompiliert und nur dann serviert werden (aber das ist eine Frage für die Zukunft).

P.S. Ich habe nie C++ geschrieben, bin bereit zu lernen. Bereit, durch Web-Entwicklung zu lernen.

+0

Vergiss CGI, [Wt] (http://www.webtoolkit.eu/) ist was du suchst. (Keine Zugehörigkeit) – Flexo

+0

CGI funktioniert nicht nach dem Prinzip "kompilieren auf Anfrage". Dies ist für eine Sprache wie C oder C++ nicht sehr sinnvoll.Sie müssen zuerst das Programm kompilieren, dann können Sie es als CGI-Skript verwenden (aber Sie müssen Header vor dem Text ausgeben). –

+0

(Auch Sie markierten die Frage C++, schrieb "C/C++" in den Titel und zeigte dann "Hallo Welt" in ziemlich altem Stil C - Sie sollten explizit eine auswählen) – Flexo

Antwort

1

Sie suchen also einen C++ - Interpreter ... hmm, ich bin mir nicht sicher, ob es welche gibt. C++ ist eine kompilierte Sprache, dh Sie entwickeln die Quelle und führen sie dann durch ein Werkzeug (einen Compiler), um native Binärdateien zu erzeugen. Diese können dann vom Betriebssystem aufgerufen werden und sind so schnell wie möglich - da alles in Dinge umgewandelt wird, die der Computer bereits versteht. Bei PHP muss der Computer in "Dinge verwandeln, die der Computer versteht" passieren, während der Computer den Code ausführt!

Natürlich bedeutet es, dass Sie nicht den Luxus haben, den Quellcode während der Ausführung zu ändern, Sie müssen anhalten, ändern und dann neu starten. Bei einem webbasierten System ist dies nicht so schlimm, es sei denn, Sie speichern den Status in Ihrer C++ - Anwendung. Wenn es wirklich zustandslos ist, können Sie den laufenden Prozess einfach beenden, neu kompilieren und neu starten.

Für eine erweiterte Verwendung können Sie das Programm jedoch in einem interaktiven Debugger ausführen. Einige davon ermöglichen es Ihnen, Ihren Code zu ändern und ihn automatisch neu kompilieren zu lassen, so dass er Ihnen genauso erscheint, als würden Sie Ihren PHP-Code ausführen. Die Schwierigkeit besteht darin, den Debugger so einzurichten, dass er mit dem Rest des Systems läuft (dh der Debugger startet den Prozess, während Apache normalerweise den Prozess startet)

Also ... tun, was Sie wollen. Ich würde mit dem Debugger-Ansatz gehen. Stellen Sie Apache so ein, dass eine einzelne Instanz Ihres Programms ausgeführt wird, und nicht eine neue gestartet wird. Dies erfordert eine CGI- oder FastCGI-Einrichtung. Sobald dies erledigt ist, starten Sie den Prozess manuell, indem Sie ihn im Debugger starten. Legen Sie einen Haltepunkt an den Orten fest, an denen Ihre App aufgerufen wird. Schreiben Sie Ihren Dienst als Multithread, sodass nur eine ausführende Instanz erforderlich ist. Sie müssen für jede Anforderung keinen neuen starten. Ich würde empfehlen, FastCGI zu verwenden und Ihre App als FastCgiExternalServer-Typ zu konfigurieren.

In der Regel, obwohl Sie Ihren Code in PHP in Apache behalten möchten, und dies verwenden, um in einem C++ - basierten Dienst aufzurufen. Dies ermöglicht Ihnen viel mehr Sicherheit (als ob der Webserver gehackt wird, der Angreifer kann die Einstiegspunkte zu Ihrem C++ - Dienst aufrufen, sie haben keinen vollen Zugriff auf alles, viele Orte machen diese Art von Architektur) und Skalierbarkeit (da der Dienst auf einem oder mehreren Anwendungsservern gehostet werden könnte).

Ich würde empfehlen, auf ServerFault für Apache-Konfiguration zu fragen.