Ich möchte mit C ++ als "Skriptsprache" auf der Serverseite in die Webentwicklung einsteigen. Meine Serverinfrastruktur ist * nix-basiert, daher ist die Webentwicklung in C ++ auf Azure nicht anwendbar, und C ++ / CLI ASP.NET ist ebenfalls nicht anwendbar.
Kann die Webentwicklung unabhängig von früheren CGI-Anwendungen mit C ++ durchgeführt werden?
web-development
c++
Scott Davies
quelle
quelle
,
sich.
an eine Steckdose umgeleitet.Antworten:
Absolut.
Es gibt sogar mehrere Gerüste sie für die Entwicklung, einschließlich Wt , cppcms , CSP und andere. Die Hauptimplementierung von FastCGI erfolgt in C und unterstützt direkt mehrere Sprachen , einschließlich C ++.
Jede Programmiersprache, die Zeichenfolgen analysieren kann, kann in CGI oder einem Servlet verwendet werden. Jede Sprache, die Bindungen mit C-Bibliotheken implementieren kann, kann auch zum Entwickeln von Modulen für ISAPI- oder Apache-kompatible Server verwendet werden.
In C ++ ist das nicht besonders einfach, und gute Template-Engines gibt es nur wenige, aber es kann getan werden.
Die Frage, ob dies eine gute Idee ist, ist natürlich eine ganz andere. :)
Hinweis: Wichtige Websites wie Amazon.com, eBay und Google verwenden C ++ für Teile ihrer Infrastruktur. Beachten Sie jedoch, dass Google C ++ nur für geschwindigkeitskritische Systeme verwendet und Amazon.com erst vor relativ kurzer Zeit von Lisp abgewechselt hat (was einige seiner leitenden Angestellten verärgerte :).
Früher hat Facebook PHP zu C ++ kompiliert, aber ihr HipHop-Compiler (teilweise in C ++ geschrieben) wurde inzwischen als virtuelle Maschine mit Bytecode umgerüstet.
quelle
Warum nicht?
Die OkCupid- Dating-Site wird mit C ++ erstellt. Es gibt wahrscheinlich andere Beispiele.
Es gibt auch ein Qt-inspiriertes Toolkit für die Entwicklung von Webanwendungen mit C ++ namens Wt .
quelle
Wenn Sie vorhaben, Ihre Webanwendung in C ++ zu schreiben, wäre es reine Verschwendung, sie dann als CGI-Schnittstelle zu verwenden.
Mein Vorschlag wäre, es asynchron mit ASIO (Asynchronous I / O) zu erstellen . Damit können Sie einen blitzschnellen Webdienst erstellen (kombinieren Sie ihn mit nginx als Reverse-Proxy- und Statics-Server, um die besten Effekte zu erzielen). Wenn Sie dies mit einer Vorlagenbibliothek wie Wt kombinieren, können Sie Zehntausende Anfragen pro Sekunde von einem einzelnen Server aus bearbeiten.
Ob dies eine praktische Alternative zum dynamischen Sprachwebframework ist, ist ein weiteres Problem.
quelle
Die kurze Antwort lautet: ALLES kann zum Schreiben einer Webseite verwendet werden, vorausgesetzt, es kann die Eingabe lesen, eine interpretierbare Ausgabe schreiben und es kann vom Webserver ausgeführt werden.
Technisch gesehen kann jede Sprache als CGI-Skript verwendet werden, vorausgesetzt:
Es gibt auch andere Möglichkeiten. Perl kann als Wrapper für C / C ++ - Code erstellt werden, der als Interpretationsebene zwischen beiden fungiert (ohne Perl-Module, die vollständig als C kompiliert sind).
quelle
Am Anfang war es ziemlich häufig - die ersten Websites, an denen ich Ende der 90er Jahre arbeitete, waren ISAPI-Erweiterungen, die in C ++ geschrieben wurden, und sie funktionierten recht gut.
quelle
Offenbar glaubt Microsoft, dass dies auch möglich ist. Schauen Sie sich Casablanca an , ein neues Toolset für (es scheint) Azure unter Verwendung von C ++.
quelle
Für PHP können Sie Ihre eigenen C / C ++ - Erweiterungen schreiben und auf diese Weise gute Performance-Vorteile erzielen. Wenn ich einen wirklich CPU-intensiven Teil meiner Webanwendung hätte, würde ich wahrscheinlich eine kleine C ++ - Bibliothek erstellen, die diese Verarbeitung in die Erweiterung verlagert und das Ergebnis dann an PHP zurückgibt und dann vom PHP an den Browser ausgibt.
Das andere, was die Leute nicht oft in Betracht ziehen, ist, bestimmte CPU-Prozesse auf die Client-Seite zu verlagern, z. B. JavaScript / jQuery. Wenn ich einen Webserver habe, brauche ich möglicherweise eine 3 GHz-CPU, um eine CPU-intensive Verarbeitung für eine bestimmte Funktion durchzuführen (möglicherweise etwas Datenverarbeitung). Mein Unternehmen zahlt monatlich Geld für diesen Server, um ihn am Laufen zu halten. Wenn ich Vorgänge für 100 gleichzeitige Benutzer skalieren möchte, die diese CPU-intensive Aufgabe gleichzeitig ausführen, benötige ich möglicherweise mehrere CPUs und Server, wodurch sich die Kosten für mein Unternehmen erhöhen. Wenn ich diese CPU-intensive Aufgabe auf die Client-Seite verlagere, kann jeder Benutzer, der die Website besucht, die Daten selbst verarbeiten, und ich muss meine Serverleistung nicht erhöhen, wodurch ich Geld einsparen kann.
Schließlich ist die Gesamtleistung von über 100 Desktops / Tablets / Mobilgeräten, die die Verarbeitung für Sie erledigen, um ein Vielfaches höher als die Leistung, die Ihr Server in einem Rechenzentrum erbringt, das Ihr Geschäftsgeld jeden Monat kostet, um weiter zu arbeiten. In diesem Fall würde Ihr Server möglicherweise nur Daten aus der Datenbank abrufen, Inhalte bereitstellen und ein wenig Vor- / Nachbearbeitung und Validierung der Daten durchführen, bevor Sie sie wieder in der Datenbank speichern. Offensichtlich würden Sie den clientseitigen Code nicht zu rechenintensiv machen, wodurch die Benutzeroberfläche des Webbrowsers blockiert / eingefroren werden könnte. Sie könnten eine AJAX-Anforderung an den Server auslösen, die Daten abrufen und die Daten dann asynchron clientseitig verarbeiten und das Web verlassen -Browser-Benutzeroberfläche vollständig verwendbar.
quelle
Ja, es kann benutzt werden. Die anderen haben verschiedene Ansätze erwähnt. Hier ist mein eigener Ansatz. Der Vorteil ist, dass es vollständig portierbar und eigenständig ist. Alle ausgewählten Bibliotheken hängen nur von ANSI C ab. Für die Einrichtung sind lediglich der Linux-Kernel und ein C-Compiler (und die offensichtlichen Dinge wie Busybox, Bash usw.) (oder Windows erforderlich und einen Compiler), es werden keine zusätzlichen Bibliotheken benötigt, keine großen Installationen.
Das Ergebnis ist ein einzelnes Programm, das sowohl ein Webserver als auch ein dynamischer Seitengenerator ist (Ersetzt sowohl "apache" als auch "php"). Es wird auch über SQLite auf die Datenbank zugreifen können.
Verwendete Bibliotheken:
createElement
Der Rest dieser Antwort ist eine vollständige Installationsanleitung für Linux. Sowohl SQlite als auch MiniXML sind optional, das Handbuch behandelt jedoch die vollständige Installation. Sie können die nicht benötigten Teile auskommentieren, wenn Sie SQLite oder MiniXML deaktivieren möchten.
1. Laden Sie die 3 Bibliotheken herunter
2. Bereiten Sie Ihren Ordner vor
sqlite3.c , sqlite3.h
mongoose.c , mongoose.h
mxml.h
3. Kompilieren Sie mxml
Möglicherweise haben Sie bemerkt, dass mxml.c fehlt. Dies liegt daran, dass wir eine statische mxml-Bibliothek erstellen müssen. Gehen Sie in den Ordner, in den die Datei mxml tar.gz heruntergeladen wurde, und führen Sie Folgendes aus:
Sobald die Kompilierung abgeschlossen ist, werden viele Dateien generiert. Die einzige Datei, die uns interessiert, ist
libmxml.a
, diese Datei in den Hauptordner zu kopieren.3.1 Doppelcheck
Überprüfen Sie, ob der Hauptordner Folgendes enthält:
mongoose.c, mongoose.h
libmxml.a, mxml.h
sqlite.c, sqlite.h
4. main.c
Lassen Sie uns das eigentliche Programm erstellen, erstellen Sie eine
main.c
Datei im Hauptordner, hier ist ein Skelett für Sie, um loszulegen.Endlich kompilieren!
Lassen Sie uns kompilieren.
cd
in deinen Hauptordner und führe diese aus:Führen Sie nun server.out mit aus
/server.out
und navigieren Sie zulocalhost:8080/hello
Getan :)
quelle
Ich vermute, dass einige eingebettete Systeme (z. B. Router, Drucker, ...) einen C ++ - gesteuerten Webserver haben.
Insbesondere könnten Sie eine HTTP- Serverbibliothek wie libonion verwenden , um einem C- oder C ++ - Programm einige Webfunktionen hinzuzufügen oder um einen Light-Server mit einer Webschnittstelle zu entwickeln.
Einige Leute codieren ihren Webserver oder ihre HTTP-Schnittstelle in Ocaml mit Ocsigen . Nicht jede Web-Sache ist PHP. Und mit FastCGI können Sie dynamische Web-Verarbeitung in / in Ihrer Anwendung durchführen.
quelle