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
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.
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
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
Zu langsam ;-) Aber mein Link ist weniger "staubig" als Wikipedia.
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?
https://github.com/Lawouach/WebSocket-for-Python das droid-sensor Beispiel ist sehr gut. und eine weitere Beispielanwendung: https://github.com/tinkercnc/LinuxCNC2Websocket
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...
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.