![]() |
Architekturfrage: Programm als Internetseite
Hallo.
Gesucht sind Möglichkeiten, die Oberfläche eines Programms als Internetseite darzustellen. Der Soll-Zustand besteht hieraus:
Die Ist-Zustand:
Schwierigkeiten:
Die Echtzeitwerte darzustellen sehe ich als die größte Schwierigkeit, da es mir am wenigsten klar ist, wie man das durch möglichst wenig Arbeitsaufwand bewerkstelligt. Die Netzwerklast kann vernachlässigt werden. Und die Verzögerung sollte nicht zu groß werden. Gibt es JavaScript-Bibliotheken, die helfen können? |
AW: Architekturfrage: Programm als Internetseite
Für Echtzeitwerte auf Webseiten zu bringen kenne ich eine gute Lösung - die ist allerdings nicht ganz billig:
![]() Die haben einige Demos da, z.B: die Telemetrie-Demo ![]() ![]() Wir setzen die mit bis zu 20.000 gleichzeitig aktiven Verbindungen pro Webseite ein, und sind ziemlich happy. Natürlich kann man sowas mit node.js als Server oder SignalR (wenn man .NET als Unterbau verwendet) auch nachbauen, aber bis man dann die Client-Bibliothek dafür so weit hat, das das mit allen nötigen Browsern geht, ggf. Fallbacks hat wenn da ein Proxy zwischen hängt der keine long-tunning-requests kann oder der Browser Websockets nicht kann, da verbringt man locker-flockig etliche Monate mit bis das einigermaßen zuverlässig tut. Edit Nachtrag: Lightstreamer hat eine Kostenlose 'moderato' Lizenz im Angebot, die pro Item ein Update pro Sekunde kann und nur Webseiten supported (und z.B. keine echten Anwendungen bzw. Mobile Apps). Die könnte ggf. schon helfen. |
AW: Architekturfrage: Programm als Internetseite
Zitat:
Bei Webseiten gibt es zwei Möglichkeiten, Daten "unaufgefordert" an den Browser zu senden: Ajax Long Polling, und WebSocket. Ersteres ist schon länger möglich, letzteres erfordert einen HTML5 fähigen Browser, ist dafür aber noch eleganter. Welche Einschränkungen bestehen denn auf der Serverseite für die Implementierung, soll es eine Delphi oder kannes auch eine .Net oder Java Serveranwendung sein? Bei kleineren Systemen (Anzahl Requests/Sekunde) ist schon Indy als Server einsetzbar, eventuell mit einem Apache Reverse Proxy. |
AW: Architekturfrage: Programm als Internetseite
Phoenix, vielen Dank. Die Beispiele erfüllen die richtige Aufgabe. Mir ist jedoch nicht klar, wie ich das nun auf für den Dienst angepassen kann? Vielleicht ist diese Bibliothek auch etwas groß geschossen?
MJustin, der Ist-Zustand verwendet eine TCP-IP-Verbindung, bei der beide Partner voneinander wissen und unaufgefordert Daten senden können. Im Soll-Zustand ist die Oberfläche dann eine Internetseite, hier muss entsprechend eine Anfrage an den Dienstgeber gesendet werden ("get http;//..."), damit dieser eine Gelegenheit erhält mit dem aktuellen Messwertsatz zu antworten. Eine andere Möglichkeit ist mir nicht bekannt. Von anderer Stelle habe ich diesen Vorschlag erhalten: JavaScript aktualisiert den Inhalt eines HTML-Div-Elements. Verwendet wird JQuery 2. Beim Ausführen ist nur eine Zeitüberschreitung zu sehen, da hinter der Adresse zum Abfragen des Messwertes natürlich kein Dienst antwortet. Der Quelltext dort zeigt aber wie es gehen könnte. ![]() Weil ich es nicht ausdrücklich geschrieben hatte: Der Dienstgeber wird so gekapselt, dass er über eine URL angesprochen werden kann ("http://Dienst..."). Dafür werden möglicherweise die Indys verwendet. Er antwortet dann mit XML oder HTML; es ist noch unentschieden, ob die XSL-Verarbeitung beim Dienstgeber oder im Browser (neuer Dienstnehmer) passieren soll. Unklar ist, wie man der Internetseite nun ausreichend Leben einhaucht, damit einige Daten automatisch aktualisiert werden, bspw. die Messwerte. Gibt es noch andere Ansätze? |
AW: Architekturfrage: Programm als Internetseite
Zitat:
Das "Fiddle" greift alle 100 Millisekunden auf den Server zu, d.h. der Client erzeugt zehn HTTP GET Anforderungen pro Sekunde. Bei Ajax Long Polling steuert der Server die Zeit bis zum Update, indem er die Response mehr oder weniger lang zurückhält - zum Beispiel solange bis tatsächlich (neue) Daten vorhanden sind. Ajax Long Polling geht auch mit der jQuery Ajax Funktion gut. Update: Zitat:
Für die Gestaltung der Oberfläche noch ein Tip: ![]() |
AW: Architekturfrage: Programm als Internetseite
Vielen Dank!
Nach einigen Versuchen sind das hier die wesentlichen Lösungsteile: einen Messwert liefern, tatsächlich dann vom Programm:
Code:
Bibliothek JQuery 2:
<?php
header('Content-Type: text/html; charset=UTF-8'); $Result = date('Y-m-d H:i:s') . ' ' . rand(); exit($Result); ?>
Code:
Ausgabeziel:
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>
Code:
Messwert abrufen und ausgeben:
<div id="Inhalt">Inhalt</div>
Code:
function poll()
{ $.ajax({ url: '<?php print($EscapedQueryURL); ?>', cache: false, success: function(data){ $("#Inhalt").html(data); }, complete: poll, timeout: 1000 }); }; $(document).ready(function () { poll(); }); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:48 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz