Hi.
Ich habe ein System, welches kontinuierlich bestimmte Messwerte erfasst.
Diese sollen kontinuierlich in einem Webbrowser angezeigt werden.
Ich hatte nun die Idee, die Webseite erst mal mit Nullwerten gefüllt, an
den Browser auszuliefern.
Anschließend würde ich gerne die aktuellen Messerte per JavaScript
abfragen.
Am Besten über einen Socket, und eine persistente Verbindung mit einem
einfachen Protokoll, um den Overhead gering zu halten.
Also ich würde gerne z.B. sowas wie Telnet nehmen, mit dauerhafter
Verbindung, und die Daten werden einfach im Klartext als CSV übertragen,
sobald sie anfallen.
Kann man per JavaScript irgendwie eine Socket-Verbindung herstellen?
Ich hab mich schon in das Thema AJAX eingelesen, auch das Long-Poll
Ajax. Aber das hat immer noch recht viel HTTP Overhead.
Achja, Ich möchte keine Lösung, die ein Plugin erfordert (wie. z.B.
Flash oder JRE). Es muss "Out of the box" und ohne Installationen bei
allen derzeit gängigen Browsern funktionieren.
Habt ihr ne Idee?
MFG
Dafür gibt es "Websockets". Mit denen kannst Du trivial einfach eine
kontinuierliche Verbindung aufrecht erhalten über die Du Botschaften
verschickst. Das ist deutlich einfacher als alles über HTTP und
funktioniert heutzutage hervorragend.
Es gibt sogar einen websocketd der im Prinzip so arbeitet wie der inetd.
Sprich Du gibts ihm Pfade und Pfade zu Deinem Programm und er führt
einfach Dein Programm aus und leitet die Standardein- und Ausgabe auf
den Websocket um. Recht viel einfacher geht es wirklich nicht mehr.
http://de.wikipedia.org/wiki/WebSocket
Ich habe das über Websockets mit Hilfe von Autobahn (http://autobahn.ws)
gemacht. Das übernimmt die ganzen Browserdetails für dich. Aufwand ist
Quasi 0. Irgendwann hab ich dann noch Crossbar als Router benutzt, damit
ich mich nicht mehr selber um die Clients kümmern muss. Ist zwar etwas
mehr Aufwand bei der Einrichtung, aber übernimmt dann viele Aufgaben für
dich.
Das Projekt ist aber noch nicht sehr alt und es gab ein paar kleinere
Bugs, die ich gemeldet habe und die dann auch sehr schnell gefixt
wurden.
Sobald mein Code mal ordentlich poliert ist werde ich ihn auch
veröffentlichen. Derzeit bau ich aber lieber neue Features ein als
aufzuräumen.
Hallo.
Das Projekt "Autobahn" sieht für mich schonmal sehr interessant aus.
Wäre es auch möglich, eine einfache WebSockets Verbundung von hand zu
initiieren, zu Lernzwecken, bevor man dann ein riesen Framework nimmt?
Oder ist das (in einfacher Form) nicht mal eben so zu machen?
Sven schrieb:> Hallo.>> Das Projekt "Autobahn" sieht für mich schonmal sehr interessant aus.>> Wäre es auch möglich, eine einfache WebSockets Verbundung von hand zu> initiieren, zu Lernzwecken, bevor man dann ein riesen Framework nimmt?> Oder ist das (in einfacher Form) nicht mal eben so zu machen?
Eine neue eigene Implementation des Protokoll selbst zu machen ist ganz
einfach, hab ich schon oft in verschiedenen programiersprachen gemacht.
Hier steht alles drin was dazu an wissen Erforderlich ist:
http://tools.ietf.org/html/rfc6455#section-5.2http://tools.ietf.org/html/rfc3174
Ich frage mich echt wer bei dem Protokoll die blöde Idee hatte, den
Sec-WebSocket-Key mit SHA1 zu verschlüsseln, der Algorithmus ist
schwerer zu Implementieren als das gesammte Websocket Protokoll!
Und sicherer wird dadurch auch nichts...
Verschlüsselung würd ich erst mal weglassen.
Ich würde sowieso nur so weit gehen, dass Text-Daten vom Server beim
Browser ankommen, um das Prinzip zu erproben.
Für den Produktiveinsatz würde man dann auf ein fertiges Framework
umsteigen, sofern eine "einfache" und leichte Variante nicht machbar
ist.
Christian Berger schrieb:> Dafür gibt es "Websockets". Mit denen kannst Du trivial einfach
Trivial? Websocket ist auf einer Kompliziertheitsskala von 0 bis 10
ungefähr bei 18 angesiedelt.
Daniel A. schrieb:> Sven schrieb:>> Hallo.>>>> Das Projekt "Autobahn" sieht für mich schonmal sehr interessant aus.>>>> Wäre es auch möglich, eine einfache WebSockets Verbundung von hand zu>> initiieren, zu Lernzwecken, bevor man dann ein riesen Framework nimmt?>> Oder ist das (in einfacher Form) nicht mal eben so zu machen?
Im Browser per JavaScript brauchst Du natürlich kein weiteres Framework,
da kannst Du direkt ein Websocket öffnen.
Serverimplementierungen gibt es wie Sand am Meer, in stark
unterschiedlicher Qualität.
Ich bin am Ende bei http://libwebsockets.org/ gelandet, das ist eine
relativ schlanke Implementierung (sowohl client als auch server, aber Du
brauchst vermutlich letzteres) in recht portablem C. Bringt auch gleich
vernünftigen SSL-Support mit.
> Eine neue eigene Implementation des Protokoll selbst zu machen ist ganz> einfach, hab ich schon oft in verschiedenen programiersprachen gemacht.> Hier steht alles drin was dazu an wissen Erforderlich ist:>> http://tools.ietf.org/html/rfc6455#section-5.2> http://tools.ietf.org/html/rfc3174
Für einen minimalen Websocket-Server mag das sinnvoll sein, schnell
etwas eigenes zusammenzuhacken. Habe ich selbst mal gemacht um das
Verhalten verschiedener Clients in verschiedenen Situationen zu testen.
Wenn man es ernsthaft einsetzen will, lohnt sich bestimmt der Einsatz
einer der einschlägigen Libraries... und die sind nicht "ganz einfach"
:)
Hallo Sven,
Sven schrieb:> Diese sollen kontinuierlich in einem Webbrowser angezeigt werden.
ich verwende für so etwas comet long polling:
https://github.com/TorstenRobitzki/Sioux
Der Server hat bindings für C++ und Ruby. Auf der Client-Seite eine
dünne API in JavaScript / CoffeeScript. Beispielsweise ist das in
https://dungeonpilot.com (eine Ruby on Rails Applikation) eingesetzt.
mfg Torsten
Eine eigene Frage?
Dieser Thread ist über 11 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.