Webdaten über (PHP/Javascript) an C++ Anwendung übertragen



  • Hallo alle miteinander,

    bevor ich zu meiner genauen Frage komme, möchte ich kurz die Umstände zum Problem erklären.
    Ich habe eine Anwendung welche C++/QT basiert ist. Ich möchte/muss nun eine Website bauen welche über PHP/Javascript (ist mir überlassen) mit dieser Anwendung kommuniziert.

    Hierbei gibt es 2 Möglichkeiten...
    Entweder lasse ich auf dem Webserver ebenfalls eine kleine C++ Anwendung laufen welche sich die Daten von der Website Lokal über den selben Rechner runter reichen lässt und dann von C++ TCP Socket zu C++ TCP Socket an den Rechenserver weiter gibt... oder aber der Webserver kommuniziert direkt über TCP Sockets mit dem Rechenserver und übermittelt so die für die Berechnung benötigten Daten.

    Meine Frage ist jetzt, kennt sich mit der Materie jemand aus bzw. kann mir dort gute Bibliotheken für empfehlen?
    Ich habe von Webprogrammierung bisher nicht so viel Ahnung da möchte ich das so einfach wie möglich zunächst halten...

    Ich habe dazu bisher "Apache Thrift" gefunden was aktuell mit am besten klingt oder sonst für die rein lokale Übertragung auf dem Webserver habe ich was von XML-RPC gelesen.

    Vielen dank schonmal für jede Hilfe

    MfG Scriper



  • Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (alle ISO-Standards) in das Forum Webzeugs verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Bin etwas verwirrt, also du willst auf jeden Fall mit Sockets arbeiten? Habe ich das richtig verstanden? Und du suchst jetzt nach einer geeigneten C++ lib um deine Serveranwendung zu schreiben?

    Ich setzte solche dinge auf dem Server am liebsten mit nodejs auf, geht fix und funktioniert super.



  • Naja was heißt auf jedenfall...
    Da die Anwendung aufm Rechenserver selbst mit QT und C++ geschrieben ist.
    Würde es sich eben anbieten die Netzwerkkommunikation über QT TCP Sockets umzusetzen.
    Meine Frage ist eher.
    Welche Libaries oder Möglichkeiten gibt es, dass ich von den in die Website eingegeben Daten (Tabellen, Bilder usw.) diese dann von der PHP/Javascript Programmierung an eine C++ Anwendung welche auf dem selben PC läuft runter geben kann?
    Diese C++ Anwendung soll dann wie ich mir jetzt zwecks Transparenz und Sichheit überlegt habe, erst über die QT TCP Sockets mit Rechen - und Dateiserver kommunizieren.

    Oder kurz gesagt, ich brauche eine Connection + Kommunikation zwischen PHP/Javascript zu einer C++ Anwendung. 🙂


  • Mod

    Das einfachste in so einer Situation ist es einen Webserver in deine Anwendung einzubauen. zB civet: https://github.com/bel2125/civetweb

    Ansonsten wird es etwas komplizierter. Du brauchst eine IPC (inter process communication) Schnittstelle zwischen deinem Webserver und deiner Anwendung. zB unix sockets, tcp sockets, com+,... oder was auch immer.

    Dann ist dein Webserver am besten ein App server wie zB Dancer ( http://perldancer.org/ ) oder NodeJS oder einer der 100 Millionen Klone die es davon gibt. Apache/Lighty sind hier zu komplex und bieten dir nur schwierigkeiten. Also direkt PHP auf Apache zu verwenden ist da weniger Toll.

    Ich persönlich würde zu civet tendieren. Also ein In-App Webserver der innerhalb deines Anwendungsprozesses läuft (das spart die unheimlich viel arbeit).



  • Hi Scriper, besitzt deine QT-Anwendung bereits eine TCP-Schnittstelle? In dem Fall könnte dein Webserver bzw. PHP direkt via Sockets mit deiner QT-Anwendung kommunizieren und Daten übertragen.

    Nebenbei gibts natürlich noch ein paar sicherheitstechnische Punkte. Läuft die Anwendung auf dem selben Server wo auch der Webserver läuft? Wenn nicht, kann je nach Umgebung jeder, der Zugriff auf den Webserver hat auch direkt mit deiner Anwendung kommunizieren.



  • Es ist relativ unerheblich, mit welcher Programmiersprache Du die beiden Kommunikationspartner schreibst. Wenn Du eine QT-Anwendung mit C++ geschrieben hast, bedeutet das ganz bestimmt nicht, dass nur C++-Anwendungen damit kommunizieren können.

    Erst mal solltest Du Dir überlegen, warum die Webseite mit der Anwendung kommunizieren möchte.

    Willst Du Daten anzeigen, die Du über die Anwendung erfasst hast und eventuell in einer Datenbank speicherst? Dann kannst Du mit der Webapplikation die Daten aus der Datenbank auch wieder lesen. Da brauchst Du nicht mit der QT-Anwendung zu kommunizieren.

    Wenn Du aber wirklich aus der laufenden QT-Anwendung Daten abholen willst oder der Anwendung Daten schicken willst, dann braucht die Anwendung eine Kommunikationsschnittstelle. Eine TCP-Schnittstelle wäre eine gute Möglichkeit. Dann musst Du Dir überlegen, welches Protokoll über diese Schnittstelle gesprochen werden soll. HTTP wäre zunächst eine prinzipielle Möglichkeit aber damit hast Du nicht festgelegt, wie die Daten strukturiert sein sollen, so dass die Anwendung auch was damit anfangen kann.

    XML-RPC ist eine gute Möglichkeit. Damit definierst Du in der Applikation Funktionen, die Du über TCP aufrufen kannst. Dafür brauchst Du in der QT-Anwendung einen XML-RPC Server und die Webapplikation einen XML-RPC Client.

    Willst Du die Webapplikation mit PHP schreiben, dann findest Du sicher einen XML-RPC Client. Und für C++ gibt es ein paar XML-RPC Serverimplementierungen.

    Wenn Du Linux einsetzt dann empfehle ich Dir mein cxxtools. Und mit tntnet könntest Du die Webapplikation auch mit C++ schreiben. Oder tntnet direkt in die QT-Applikation mit rein compilieren, so dass die QT-Applikation auch gleich der Webserver ist.

    Soweit erst mal. Du siehst, es gibt zahlreiche Möglichkeiten. Du hast dein Problem relativ ungenau beschrieben, so dass es schwierig ist, eine konkrete Empfehlung auszusprechen.

    Die Lösung hängt auch davon ab, welches Vorwissen und welche Qualitätsanforderungen Du hast. Bei geringen Vorwissen und sehr geringen Qualitätsanforderungen kannst Du auch einfach eine Datei schreiben und wieder lesen. Das wäre so ein File-RPC mit polling. Aber sag dann nicht, dass ich das vorgeschlagen habe 🤡 .



  • Ok dann möchte ich zunächst erst einmal mein Problem nochmal genauer schildern...

    Es existiert aktuelle eine C++/QT Anwendung welche Daten einlesen kann, über XML's und natürlich auch fertige Analyseschritte oder Datensätze aus der Anwendung heraus abspeichern kann in Form von XML's.

    Es ist nun angedacht das eben genau diese Software auch über eine Website(eingeschränkt) genutzt werden soll/kann.
    Hierbei läuft die Anwendung auf einem "entfernten" Rechenserver und der User wird über eine Website welcher wiederum auf einen anderen Webserver läuft, Daten eingeben können und Auswählen welche Funktion der Anwendung er auf seinen Daten nutzen möchte.
    Dieses soll dann von der Website in form eines XML - Schemas gespeichert werden, und nach unten zu einer C++ Anwendung (immernoch auf dem Webserver) gegeben werden.
    Diese C++ Anwendung (Aufm Webserver) soll dann das Analyse XML für die Berechnung an den Rechenserver und die eigentliche Applikation weiterleiten...
    Die Anwendung rechnet dann fröhlich rum und übermittelt danach wieder in Form von XML die Lösung an den Webserver, also die C++ Anwendung auf ihm welche sie wiederum nach oben zur Website(PHP/Javascript whatever) hochreicht und anzeigt.

    Weiterhin soll aber auch über die Website ein DateiUpload von Bildern möglich sein welche dann wieder nach unten zur C++ Anwendung des Webservers gereicht werden und diese dann die Dateien an den Dateiserver übermittelt. (WO dann wohl auch wieder eine einfache C++ Anwendung für den Empfang laufen wird)

    D.h. kurz gesagt von der Website kommen XML's und Bilddaten welche zur darunter liegenden C++ Anwendung sollen und dann jeweils verteilt werden an Rechen/Dateiserver.

    __Herrmann schrieb:

    Hi Scriper, besitzt deine QT-Anwendung bereits eine TCP-Schnittstelle? In dem Fall könnte dein Webserver bzw. PHP direkt via Sockets mit deiner QT-Anwendung kommunizieren und Daten übertragen.

    Nein besitzt sie bisher noch nicht, aber ich habe vor eben genau dies zu implementieren.
    Ich könnte also von der Website Problemlos Daten (XMLs und Bilddateien) an eine C++ Anwendung welche auch auf dem Webserver läuft übertragen?

    __Herrmann schrieb:

    Nebenbei gibts natürlich noch ein paar sicherheitstechnische Punkte. Läuft die Anwendung auf dem selben Server wo auch der Webserver läuft? Wenn nicht, kann je nach Umgebung jeder, der Zugriff auf den Webserver hat auch direkt mit deiner Anwendung kommunizieren.

    Siehe Erklärung oben 🙂
    Bzgl. der Sicherheit hatte ich sonst schon gesehen das es z.B. ein QT Example "Secure Socket Client" gibt

    Ich könnte ja theoretisch auch direkt von der Website zu dem Dateiserver (C++ Anwendung) und dem Rechenserver (Die eigentliche C++ Anwendung) kommunizieren via QT TCP Sockets wenn ich das jetzt richtig verstanden habe? Jedoch halte ich den zwischenschritt zu einer weiteren C++ Anwendung auf dem Webserver für sinnvoller, zur Kapselung/Netzwerkschutz etc.



  • Hello again! 🙂

    Ich habe Aufgrund der Aussage von Hermann jetzt intensiver den Gedanken verfolgt, mit Hilfe meiner nun bereits implementierten QTCP Sockets direkt darüber mit der Website zu kommunizieren.
    Hier sind mir jedoch noch 1-2 Fragen gekommen...

    Die Website läuft nochmal zur Erinnerung also auf meinem Webserver auf dem selbigen läuft auch eine kleine C++ Anwendung, welche einen QTCP Server hat mit QTCP Sockets dann quasi.
    Diese kommunizieren nach aktuellem Stand bereits mit dem Datei und Rechenserver.

    D.h. mir fehlt jetzt nurnoch die Kommunikation nach oben zur Website von der C++ Anwendung auf dem Webserver.
    Empfiehlt es sich hier eher das ganze auf PHP oder auf Javascript aufzubauen?
    Ich habe nicht wirklich Erfahrung mit beiden und müsste mich noch genauer einarbeiten. Aber eine Grundlegende Hilfestellung welches von beiden sinnvoller wäre, würde mir schon sehr weiterhelfen.
    Gerne auch mit Beispielen oder anderen Anmerkungen 🙂

    Für die Verbindung zu einem PHP Socket habe ich bereits das hier http://php.net/manual/de/sockets.examples.php und andere Sachen gefunden.

    Bzgl Socket Aufsetzung mittels Javascript gab es auch schon 1-2 Google Treffer.

    Falls der von mir eingeschlagene Weg nun gar nicht zielführend ist bin ich auch gerne offen für weitere Vorschläge. Mein Ziel sollte hoffentlich klar sein 🙂

    Beste Grüße
    Scriper


  • Mod

    Wie bereits geschrieben: du brauchst einen vernünftigen App Server. Ich würde Dancer bzw. einen der vielen Klonse anbieten oder eben auch NodeJS.

    Prinzipiell willst du die Webseite nicht auf einem Apache/nginx/etc. laufen lassen, da du hier zuviele Probleme bekommst. Du brauchst einen dedizierten Server der eine konstante Verbindung zu einer Anwendung offen halten kann. Eine normales PHP Script auf einem Apache läuft 1 sekunde und wird danach beendet wenn der Request zuende ist. Du willst aber persistente Verbindungen.

    Das geht über unterschiedliche Methoden und natürlich auch mit Apache/nginx aber such dir eine Sprache aus die du magst: PHP, Ruby, Perl, Python, JavaScript sind hier die großen. Jeder hat einen Dancer Klon bzw. JavaScript hat NodeJS.

    NodeJS ist sicher die "coole" Variante aktuell.

    Du kannst den Webserver aber auch in C++ schreiben: siehe civetweb. Der hat zB lua als embedded Sprache für scripting.


Anmelden zum Antworten