Gibt es konzeptionelle Nachteile beim Erstellen einer Web-App mit C ++ und MySQL?

10

Ich habe ein ziemlich interessantes Projekt geerbt, bei dem es eine gute Gelegenheit gibt, eine vorhandene Software in eine SaaS-Web-App umzuwandeln. Da das Projekt vererbt wird, ist die Codebasis / das Code-Framework bereits als C ++ und MySQL definiert. Die App selbst wird kompiliert und unter Windows Server als EXE-Datei ausgeführt. Die Benutzeroberfläche ist webbasiert und die App funktioniert als eine Art Server. Nach dem, was ich über moderne Web-Apps weiß, ist dies vielleicht eine ungewöhnliche Wahl. Heutzutage scheinen sich die meisten Menschen für ein PHP-Framework oder Ruby on Rails zu entscheiden. Das ist sicherlich der Eindruck, den ich beim Lesen von Blogs zu diesem Thema bekomme. Ich bin also sehr interessiert zu wissen, ob eine von MySQL unterstützte C ++ EXE eine solide Grundlage für eine Web-App darstellt oder ob wir versuchen sollten, auf andere Weise zu erstellen.

jnthnclrk
quelle
Was Sie beschreiben, klingt eher nach einem Serverprozess als nach einer Webanwendung. Und für Serverprozesse sind PHP oder RoR sicherlich ungewöhnliche Optionen. Was für ein Problem hast du eigentlich?
Benjamin Bannier
Verwendet die Exe möglicherweise den neuen Hostable Web Core ( awesomeideas.net/page/IIS7-Hostable-WebCore.aspx ) oder implementiert sie tatsächlich ihren eigenen HTTP-Server von Grund auf neu? Wenn erstere, dann haben sie vielleicht wirklich versucht, eine sehr schnelle App zu erstellen, indem sie C ++ verwendet und sie selbst gehostet haben, um sie auf Client-Computer zu portieren.
Jimmy Hoffa
Natürlich würde jeder Vernünftige so etwas wie Net :: HTTPServer von POCO verwenden, anstatt einen HTTP-Server von Grund auf neu zu schreiben. Aber es ist nicht so, als ob RoR oder zB Python-Frameworks keinen Webserver packen.
Benjamin Bannier
4
Es ist nicht ungewöhnlich, C ++ als Backend einer Webanwendung zu haben. Die Google-Suche ist in c ++ geschrieben. Viele von Yahoo Apps sind C ++. Nahezu jede AAA-Web-App, die von Millionen von Menschen verwendet wird, ist in C ++ geschrieben.
Lord Tydus
Ja, die App wurde als benutzerdefinierter Webserver konzipiert. Die Web-App-Seite stammt also von der HTML-Administrator-Benutzeroberfläche und den Funktionen.
jnthnclrk

Antworten:

20

Es ist OK , um eine Web - Anwendung mit C ++ zu machen IF die Vorteile die Kosten überwiegen, offensichtlich. Google, Amazon und Facebook sind alle mit C ++ ausgestattet, um Geschwindigkeit, Speicher und Energie zu optimieren - auch bekannt als Serverkosten.

Wie Sie jedoch vermutet haben, hat die Verwendung von C ++ hierfür Nachteile. Es hängt jedoch von Ihren Werkzeugen ab.

Lassen Sie mich zunächst die cppcms- Website dazu zitieren :

Wann sollte CppCMS verwendet werden?

Die C ++ - Sprache ist aus vielen Gründen bei weitem nicht beliebt für die Webentwicklung: Mangel an geeigneten Tools, Fähigkeiten von Entwicklern und vielem mehr.

Es gibt jedoch Bereiche, in denen die C ++ - Webprogrammierung mit CppCMS sehr nützlich und effizient wird, und einige, in denen dies nur Zeitverschwendung ist.

Wann sollte oder kann CppCMS verwendet werden?

1. Hochlastige Websites und Anwendungen mit Hunderten und Tausenden Treffern pro Sekunde, bei denen hohe Leistung, Effizienz und Skalierbarkeit erforderlich sind.

2. Anwendungen, die skalierbare Comet / Server Push-Technologien erfordern --- CppCMS kann Hunderte und Tausende gleichzeitige HTTP-Verbindungen mit minimalem Ressourcenverbrauch effizient verarbeiten.

3. Einbetten der Weboberfläche in vorhandene C ++ - Anwendungen / Dienste mit geringen Kosten für zusätzliche Bibliothek.

4. Eingebettete Geräte mit geringer Leistung - CppCMS ermöglicht die Erstellung umfangreicher Anwendungen mit relativ geringen Hardwarekosten, die eine relativ schnelle Leistung erbringen würden.

Wann nicht verwenden?

Wenn Sie kleine Webanwendungen erstellen, die keine hohe Auslastung erfordern und eine sehr kurze Markteinführungszeit erfordern, sind Tools wie Django oder RoR für solche Aufgaben wahrscheinlich besser geeignet.

Die für C ++ spezifischen Nachteile sind:

  • Die Kompilierungszeiten können im Vergleich zu anderen Sprachen sehr, sehr, sehr langsam sein. Dies kann sich auf Iterationen, das Veröffentlichungsintervall, aber auch auf die Moral des Entwicklers auswirken. Stellen Sie sicher, dass es sich lohnt.
  • Meistens müssen Sie Änderungen kompilieren. Es kann vermieden werden, aber es ist das Übliche.
  • Das Schreiben von modernem C ++ macht es einfach (lernen, lesen, schreiben, debuggen usw.), aber viele C ++ - Entwickler wissen nicht, was modernes C ++ ist. Wenn Sie also im Team arbeiten, müssen Sie vom gesamten Team über gute Kenntnisse in Modern C ++ verfügen. Wenn nicht, werden Sie leicht in sehr komplizierte Fehler geraten. Das heißt, es ist eher ein Menschenproblem als ein Sprachproblem. Es ist nur so, dass die C ++ - Geschichte nicht dazu beigetragen hat, es einfach zu verstehen. Guter Unterricht ist nicht so verbreitet wie in moderneren (historisch) Sprachen.
  • Unicode wird von der C ++ - Kernsprache immer noch schlecht unterstützt, was es zu einer potenziellen Quelle großer Schmerzen macht. Verwenden Sie UTF-8 einfach überall und einige Bibliotheken (siehe Boost), um es zu verwalten.
  • C ++ Standard weiß nicht, was eine Bibliothek ist. Daher verwenden wir herkömmliche Methoden, um sie auf verschiedenen Compilern / Linkern / Betriebssystemen zu verwalten. Dies kann ein Problem sein, wenn Sie anfangen, plattformübergreifenden Code zu verwenden, der einige Module "on the fly" laden / entladen muss.

Vielleicht einen Blick auf CPPCMS werfen? Oder vielleicht wt, wenn Sie eine Website im GUI-Stil erstellen möchten?

Überprüfen Sie auch diese Fragen:

Klaim
quelle
3
Mein Verständnis ist, dass Facebook in PHP programmiert ist, aber sie haben auch ihren eigenen nativen Compiler für PHP in C ++ für Linux erstellt. Der Hauptgrund, warum Facebook den Compiler entwickelte, war die Reduzierung der Stromkosten für den Betrieb von Servern. Es war nicht wirklich schnell (es ist schneller), aber die Tatsache, dass es weniger CPU-Auslastung pro Anfrage erfordert. Es ist ein Open Source Projekt, das hier zu finden ist. developer.facebook.com/blog/post/2010/02/02/…
Reactgular
1
Ja, die Gründe variieren, deshalb habe ich die Energie- und Serverkosten erwähnt. Davon abgesehen sagte Alexandrescu kürzlich in einem Interview, ich glaube, dass immer mehr Facebook-Code direkt in C ++ geschrieben wird, aber er erwähnte nicht warum, wenn mein Gedächtnis korrekt ist. Sie bieten auch eine Open-Source-Bibliothek voller C ++ - Dienstprogramme / Algorithmen: Folly facebook.com/notes/facebook-engineering/…
Klaim
Beachten Sie auch, dass selbst wenn der Code zuerst in PHP geschrieben und dann in C ++ konvertiert wird, 3 der Nachteile, auf die ich hingewiesen habe, immer noch zutreffen.
Klaim
2
Ein weiteres C ++ - Webframework: wt (witzig). Es ist für Leute, die Web-Apps erstellen möchten, die wie Desktop-Apps unter der Haube funktionieren. Für die Portierung ist es eine gute Wahl.
K.Steff
Ich denke, alle diese Websites haben Komponenten, die in mehreren Sprachen geschrieben sind. C ++ wird höchstwahrscheinlich als Optimierung für Codeabschnitte verwendet, die eine genau abgestimmte Speicherverwaltung erfordern.
Jiggy
3

Wordpress, das in PHP mit einigen installierten Plugins ausgeführt wird, bringt meinen Winders-Server in die Knie. Ich habe also überhaupt keine Probleme mit der Idee, eine Webanwendung in C ++ zu implementieren. Geschwindigkeit ist ein wichtiger Bestandteil des Web-Erlebnisses.

Grafikdesign-Zelte für die meisten Webprojekte. PHP ist eine obskure Skriptsprache, die in HTML ausgeführt wird. Ermöglichen, dass die PHP-Autoren in HTML ein- und aussteigen. Die Arbeit mit HTML bietet daher viele Vorteile.

Sie können jedoch eine beliebige Anzahl von HTML-Vorlagenlösungen in C ++ implementieren.

Man könnte Ihnen eine lange Liste von Python- und PHP-Frameworks zur Verfügung stellen, die für eine schnelle Entwicklung sorgen, aber wenn Sie viel Zeit haben, ist C ++ definitiv möglich.

Was ich nicht verstehe, ist Ihre Entscheidung, C ++ unter Windows auszuführen. lol

Reactgular
quelle
1
Klassisches Strohmann-Argument, es gibt viele bessere schnelle Alternativen zu WordPress / PHP, die nicht C ++ sind. Ich sage nicht, dass C ++ keine relevante Wahl ist, nur Ihr Argument ist nicht wirklich gut umrahmt.
Jimmy Hoffa
Ich stimme mit Ihnen ein. Ich glaube nicht, dass ich versucht habe, WordPress zu einer Alternative zu machen. Es ist nur so, dass meine Erfahrung in letzter Zeit gezeigt hat, dass es schwierig ist, mit populären Frameworks eine gute Leistung zu erzielen.
Reactgular
1
StackExchange wird auf dem ASP.NET MVC-Framework ausgeführt. Node.Js hat ein geringes Gewicht und eine hohe Leistung. Wenn Sie wirklich etwas lächerlich Performantes wollen, gibt es Snap- oder Yesod Haskell-Frameworks yesodweb.com/blog/2011/03/… , Haskell, JavaScript und C #, allesamt hochgradig müllsammelnde Sprachen.
Jimmy Hoffa
1
Beachten Sie, dass die Geschwindigkeit der Codeausführung auf dem Server in vielen Fällen nicht der einschränkende Faktor in einer Web-App ist. Große Teile der Zeit verbringen sich für etwas (Datenbank) oder auch im Front - End (Abrufen CSS, Bilder, JavaScript , Dinge zu tun, HTML - Rendering) warten
johannes
1

Es ist sicherlich eine ungewöhnliche Wahl. C ++ wurde nicht für Webanwendungen entwickelt, und während Bibliotheken vorhanden sind, um beispielsweise FastCGI-Anwendungen mit C ++ zu schreiben, müssen Sie viel mehr Arbeit leisten, um Ihre Basisanwendung zu erstellen. "Web-Sprachen" erledigen normalerweise viele Dinge für Sie, die Sie von anderen Stellen in C ++ erhalten müssen, z. B. das Implementieren des HTTP-Protokolls, das Generieren von HTML usw.

Außerdem geht es bei Webanwendungen hauptsächlich um Zeichenfolgen, was nicht gerade die stärkste Seite von C ++ ist. In der Sprache selbst ist kein Zeichenfolgentyp integriert. Dies führt zu einigen Macken und macht die Verarbeitung von Zeichenfolgen umständlicher als bei einer höheren Zeichenfolge. Level-Sprachen. Der korrekte Umgang mit Zeichencodierungen in C ++ grenzt an schwarze Magie. Und C ++ kann auf ziemlich unschuldig aussehendem Code sehr hart abstürzen, was bei einer höheren Sprache weitaus weniger wahrscheinlich ist (auch sie können abstürzen, aber in den meisten Fällen kann der Webserver ordnungsgemäß wiederhergestellt werden, insbesondere auf Plattformen, die ein Per verwenden -anforderungslebenszyklusmodell, wie PHP).

Das heißt, wenn Sie den größten Teil der Codebasis bereits geschrieben haben, ist C ++ möglicherweise immer noch eine gute Wahl. Sie müssen einige Bibliotheken finden, die alle Arten von Web-Dingen abdecken (insbesondere möchten Sie entweder einen eigenständigen HTTP-Webserver in Ihr Programm integrieren oder sich beispielsweise über FastCGI oder durch Kompilieren in Apache einbinden können ein Modul (Sie möchten auch eine Art Vorlagenbibliothek, um das Rendern von HTML-Dokumenten zu vereinfachen).

Schließlich gibt es das Problem des Entwicklermarktes. Es gibt viele C ++ - Entwickler und noch mehr Webentwickler, aber die Überlappung ist wahrscheinlich nicht so groß. Wenn Sie also jemals Leute einstellen müssen, um an dieser Sache zu arbeiten, fällt es Ihnen etwas schwerer als beispielsweise mit. PHP.

tdammers
quelle
1

Wie andere bereits gesagt haben, ist C ++ konzeptionell eine gute Umgebung für eine Webserverentwicklung. Es gibt jedoch mehrere Überlegungen, wenn Sie diese Entscheidung treffen.

Die Popularität von Skriptsprachen für das Design von Webservern wird sich ändern. Einfache Änderungen können leicht vorgenommen werden, indem die Ergebnisse nahezu sofort demonstriert werden. Sie werden feststellen, dass jedes gute Webserver-Design ähnliche Funktionen bietet. In der Tat ist C ++ eine hervorragende Umgebung, um dieses Ziel zu erreichen.

Der Schlüssel zum Aufbau eines guten Webserver-Anwendungssystems ist die Trennung der Benutzeroberfläche vom Code. Ein Ziel beim Erstellen einer Webanwendungsumgebung besteht darin, zu vermeiden, dass "Ihre Benutzeroberfläche in meinem Code und Ihr Code in meiner Benutzeroberfläche enthalten ist".

Ich würde gerne bei Systemen wie cppcms vorsichtig sein. Ich würde erwarten, dass es etwas Ähnliches bietet.

Sie benötigen keine Skriptsprache, um Flexibilität und Leistung zu bieten.

Bill Door
quelle