Wie Zusammenspiel zwischen User-GUI (Webpage) und Programm (C++) realisieren



  • Guten Tag!

    Was ist das gängige Designprinzip, um eine Webpage als User-Interface mit einer Programmlogik in C++ zu verknüpfen?

    Hintergrund: Software ist in C++ geschrieben und läuft als Service im Hintergrund auf einem Linux-System. Über den Browser soll man sich mit dem Gerät verbinden können um dann Einstellungen vorzunehmen. Als Beispiel sei hier genannt, dass der Anwender der Anwendung mitteilen will, der Port 6677 der sonst Logdaten rausschickt, möge bitte nicht mehr bedient werden. Oder die Anwendung soll anstatt Port 6677 jetzt bitte 7766 nehmen.

    Meine Idee wäre, das Konfigurationsdateien (xml?) über die Webseiten geändert werden. Das Programm selbst prüft zyklisch diese Dateien auf Änderungen und übernimmt sie ggfs (xml-Parser in C++).

    Ist das Stand der Technik? Oder gibt es wie in Java irgendwelche tollen push-Service-publish-Geschichten mit Servlets wo man direkt zwischen Programm und Webseite kommunizieren kann? 😕



  • Mein erster Gedanke wäre auch hin zu Konfigurationsdateien gewesen. Im weiteren nachdenken wäre ich davon aber wieder abgekommen, da es unter Umständen ziemlich unsicher ist. Es gibt weis Gott wie viele Fälle, warum die Datei nach dem Ändern plötzlich garnicht mehr da sein könnte.

    Ich würde den Dienst auf einem definierten Port auf die Konfigurationspakete horchen lassen und anschließend per Socketverbindung die Änderungen an den Dienst übertragen.

    Dies sollte eigentlich in jeder gängigen Web-Sprache möglich sein.



  • Ganz bestimmt ist das nicht Stand der Technik. Eine Konfigurationsdatei zu pollen ist nicht so, wie man sich das vorstellt.

    Das Problem lässt sich ein wenig konkretisieren.

    Im Prinzip ist es erst mal egal, ob du eine Webapplikation oder sonst was hast, was den Prozess irgendwie beeinflussen willst. Du musst in dem Prozess auf jeden Fall irgend etwas einbauen, womit du den zur Laufzeit konfigurieren kannst.

    Eine durchaus übliche Möglichkeit ist Signal wie beispielsweise SIGUSR1 zu definieren, welches den Prozess veranlasst, seine Konfigurationsdatei neu einzulesen. Eine andere wäre, eine wie auch immer geartete IPC(Inter-Prozess-Kommunikation) -Schnittstelle vorzusehen. Wobei ein Signal ja eigentlich auch darunter fällt.

    Du könntest auch den Webserver direkt in den Prozess einbauen. Dann kommuniziert der Browser direkt mit dem Prozess. Ich hätte da beispielsweise tntnet im Angebot. Ich würde das natürlich so machen 😉 .



  • Ich habe das letztens mit mongoose gemacht. Einfach einen HTTP Server in dem Service einbetten und fertig. Da hat man Zugriff auf alles. Ist super praktisch wenn du eine feste Struktur hast die du nicht anfassen willst/kannst/darfst.

    Ansonsten wäre das korrekte eine IPC zu machen. Die Webseite ist ein Prozess und der Service ist eine Prozess und diese reden dann miteinander zB über Sockets oder TCP oder auch eine Plattformabhängige Technik.


Anmelden zum Antworten