Forum: PC-Programmierung Socket per JavaScript? Messwerte kontinuierlich im Browser anzeigen


von Sven (Gast)


Lesenswert?

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

von Peter II (Gast)


Lesenswert?

Ich würde es einfach per http machen, der Overhead ist gar nicht so 
groß. Wenn der Server Http1.1 unterstützt bleibt die Verbindung auch 
offen.

von Christian B. (casandro)


Lesenswert?

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

: Bearbeitet durch User
von Bastler (Gast)


Lesenswert?

Was Du brauchst, nennt sich Websockets und ist ab HTML5 nutzbar. Der 
Browser lauscht, der Server sendet, sobald er was zu sende hat.
http://www.html5rocks.com/de/tutorials/websockets/basics

von Bastler (Gast)


Lesenswert?

Zu langsam ;-)
Aber mein Link ist weniger "staubig" als Wikipedia.

von Hermann K. (r2d2)


Lesenswert?

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.

von Sven (Gast)


Lesenswert?

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?

von W. M. (thematsche)


Lesenswert?

https://github.com/Lawouach/WebSocket-for-Python

das droid-sensor Beispiel ist sehr gut.

und eine weitere Beispielanwendung:
https://github.com/tinkercnc/LinuxCNC2Websocket

von Daniel A. (daniel-a)


Lesenswert?

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.2
http://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...

von Sven (Gast)


Lesenswert?

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.

von Bernd K. (prof7bit)


Lesenswert?

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.

von sssssasasas (Gast)


Lesenswert?

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" 
:)

von Torsten R. (Firma: Torrox.de) (torstenrobitzki)


Lesenswert?

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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.