SSE oder Websocket?

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
SVblue
User
Beiträge: 15
Registriert: Montag 3. Februar 2014, 15:48

ich habe hier ein Messgerät dessen Werte ich über python abgerufen und in eine Datenbank gespeichert werden. Getriggert wird dies durch eine SPS.
Das ist soweit kein Problem.
Nun würde ich das in dem Moment auch auf einer Website darstellen (der Betrachter hat hier keinen Einfluss auf die Seite/keine Aktionsmöglichkeit).
Problem dabei, ich möchte die Website, oder Teile darin (AJAX), nicht permanent "refreshen" lassen da es sein kann, dass sich tagelang nichts ändert, ein anderes mal evtl. jede Sekunde.
Ideal wäre, wenn die Werte zum Client (Website) gesendet werden wenn sie erfasst werden/sich ändern.

SSE (server-sent events)... klingt erstmal ganz gut aber bislang habe ich nur Beispiele gefunden die alle 5 Sekunden aktualisieren - leider nicht bei Bedarf.

Websocket kam mir auch in den Sinn, aber hier habe ich das Senden von python an eine Website (php) nicht geschafft.
Hatte mir überlegt das auf Basis eines Chats zu machen... der Server wäre hier gleichzeitig auch ein Client der Informationen sendet.

Hat jemand evtl. ein einfaches Beispiel?
Da es sich nicht um sicherheitsrelevante Werte handelt und auch nicht über Internet genutzt wird (nur im LAN) genügt rein die Funktionalität.
Sirius3
User
Beiträge: 17712
Registriert: Sonntag 21. Oktober 2012, 17:20

Websocket ist das richtige: eine Webseite läuft mit Browser, das hat mit PHP gar nichts zu tun, da brauchst Du Javascript.
SVblue
User
Beiträge: 15
Registriert: Montag 3. Februar 2014, 15:48

f*ck, stimmt (leider)... mein "letzter" Gedanke war, den Websocket-Server auf den Client laufen zu lassen... so kann der eigentliche Server, auf dem die Daten eingehen, bei Bedarf eine Verbindung zum Client aufbauen und die Informationen zur Darstellung senden. Somit müsste keine Permanentverbindung bestehen. *hmpf* ??
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Wie soll der Client denn dann an die Information kommen, das sich was geändert hat? Du verdoppelst doch damit nur Menge an Verbindungen, ohne Not.
nezzcarth
User
Beiträge: 1632
Registriert: Samstag 16. April 2011, 12:47

@SVblue: Zu SSEs hatte ich vor eine Weile hier auch mal ein Meinungsbild eingeholt (viewtopic.php?f=7&t=48566) – Und das fiel nicht besonders positiv aus. Ich habe die weiteren Experimente dann eingestellt, da das wohl doch zu exotisch ist und unschöne Einschränkungen hat.
Zuletzt geändert von nezzcarth am Dienstag 1. Dezember 2020, 18:25, insgesamt 1-mal geändert.
SVblue
User
Beiträge: 15
Registriert: Montag 3. Februar 2014, 15:48

@__deets__: Warum verdoppeln? Der PC, der die Website/Anzeige darstellen soll - so es möglich wäre - müsste den Websocketserver darstellen, also permanent gestartet.
Der Datenbankserver, der die Daten vom Messgerät erhält, baut im Falle von eingehenden Daten eine Websocket-Verbindung auf, sendet die Daten und beendet die Verbindung wieder.

So der Plan, jedoch sehe ich z.Z. das Problem beim Websocketserver... der müsste auf dem Client-PC laufen, ausschließlich im Browser (javascript?), denn dieser Client ist nur eine Anzeige - Webkiosk.
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ich glaube du hast nicht verstanden, was websockets sind. Die benutzt man zwischen Web-Server und Browser. Und wenn du den Server auf Maschine A laufen lässt, und deren Browser auf Maschine B (so klingt deine Beschreibung von Client), dann bringt es genau gar nichts, einen Server auf B zu betreiben. Das zumindest beschreibst du hier. Denn an den müssen die Daten um die es geht ja auch erstmal geliefert werden. Daher “Verdopplung”.

Wer auch immer die Webseiten ausliefert, die B darstellt - DASS ist der Ort, wo ein websocket Server laufen muss.
SVblue
User
Beiträge: 15
Registriert: Montag 3. Februar 2014, 15:48

Aktuell ist es eine reine HTML-Datei die sich auf dem Client befindet. Diese wird per Meta-refresh immerwieder neu geladen. Ändern sich die Daten auf dem Server erzeugt er eine gleichnamige HTML-Datei und legt diese auf dem Client per ssh ab und überschreibt so die alte.

Das funktioniert grundsätzlich stabil... flackert natürlich. Immerhin findet die Datenübertragung nur statt wenn wirklich neue Daten vorliegen.

Nun suche ich schlicht nach eine besseren Lösung (ohne permanenten Refresh) um bei neuen Daten diese auch Darstellen zu können.

Ich bin für alles offen was clientseitig in diesem Fall möglich ist... hier läuft nur Firefox oder Chrome im Kioskmode. (Porteus Kiosk)
Sirius3
User
Beiträge: 17712
Registriert: Sonntag 21. Oktober 2012, 17:20

Dann beschäftige Dich erst einmal mit Webservern für Python, also z.B. Flask. Und wenn Du das verstanden hast, kannst Du ein Modul für Websockets für Flask dazunehmen.
Antworten