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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Sven (Gast)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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) Flattr this


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht lesenswert
Zu langsam ;-)
Aber mein Link ist weniger "staubig" als Wikipedia.

von Hermann K. (r2d2)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.