Dienst starten und per Website darauf zugreifen?

#1
Hallo,

nach zahlreichen Recherchen und Ideen, weiß ich leider immer noch nicht genau, wie ich mein Projekt umsetzen soll.

Ich habe hier eine Maschine, welche ich später einmal über eine kleine Website, die im eigenen Heimnetz erreichbar ist, steuern will.
Meine Aufgabe ist es einen Art 'Dienst' zu programmieren, der im Hintergrund läuft, beim erstmaligen starten eine Verbindung zur Maschine aufbaut, diese initalisiert und danach in regelmäßigen Abständen überprüft, ob noch eine Verbindung besteht (Keep-alive).
Gleichzeitig soll dieser Dienst aber auch neue Werte entgegennehmen, die über eine kleine Website eingegeben werden.
Für den UDP Verbindungsaufbau/-abbau zum Gerät und für die Steuerung liegt bereits eine fertige Source vor, ich muss diese nur in den neuen Dienst mit integrieren und die Methoden mit den neuen Werten füttern können.
Als Webserver dient hier ein Raspberry Pi mit Jetty und darauf soll ebenfalls der Dienst später laufen.

Meine Idee wäre entweder ein Dienst gewesen, der im Hintergrund läuft und auf einem Port zuhört und die Website schickt auf diesen Port die Befehle bzw. neue Werte.

Die andere Idee wäre mithilfe eines Plugins, welches ich auf der Website starten kann und unabhängig von der Seite/Browsersession läuft. Ist ein solches Plugin möglich?

Da sich beide Ansätze sehr umständlich anhören, wollte ich fragen, ob es nicht eine bessere Möglichkeit gibt bzw. welche Ideen ihr so habt?

Gruß
 
#2
Hi

kleine Korrektur zuerst:
UDP hat keine "Verbindungen", Verbindungsaufbau etc. macht also keinen Sinn.
...ich nehme einmal an, in der Praxis passt es schon irgendwie.

Das Ziel ist also ein alleinstehendes Java-Programm, um Requests von einer Webseite in UDP-Daten zu übersetzen (die Idee mit dem Browserplugin ist möglich, aber wenn man noch nie eins geschrieben hat wird das viel mehr Aufwand).

Der Kern vom Programm sollte kein Problem sein, UDP-Seite besteht ja schon.
Zur Kommunikation mit der Webseite:

a) So wirklich "reines" TCP/UDP geht mit JS nicht (wenn, dann könnte man sich den Zwischenservice fast sparen)... HTTP-Anfragen wären aber sehr einfach (wie? Einfach ganz normale Ajax-Anfragen, Millionen Beispiele im Internet ... besonders nett mit der JS-Lib JQuery).

Dafür muss das neue Programm aber auch einen (rudimentären) HTTP-Server haben, empfehle NanoHTTPd https://github.com/NanoHttpd/nanohttpd

b) Es gibt die SameOriginPolicy, eine Sicherheitsbeschränkung dass JS nur Daten von der Quelle anfragen darf, wo auch die Webseite hergekommen ist. Inkl. Portnummer.

Als Abhilfe kann der Webseiten-Teil dem Browser mit bestimmten HTTP-Headern erlauben, auch andere Quellen für JS zuzulassen; https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS . Wie das in Jetty geht kann ich auch nur suchen, vielleicht hilft das ja: http://stackoverflow.com/questions/16037558/how-to-add-access-control-allow-origin-to-jetty-server

...

PS: Falls die Maschine (hoffentlich?) irgendeinen Zugriffsschutz hat und nicht von jedem im ganzen Internet Anweisungen nimmt, ist das bei der Verbindung Webseite-Programm auch zu beachten.
 

melmager

Erfahrenes Mitglied
#3
Wobei auch bei jetty kann man mit mit entsprechenden Plugins arbeiten.
Client Anfrage geht über POST und zurück Html/Xml

Dann steht zwar deine Verbindung - es fehlt aber immer noch ein Protokoll das den Datenfluss regelt

Ich arbeite grade ein ähnliches Problem ab :)

Die Hauptfrage in dem Zusammenhang ist doch: was kann denn deine maschine ?
Denn auf Serverseite ist alles möglich :)
Und was man nicht vergessen darf: bei Http geht keine ständige Verbindung.
Die Maschine müsste also wenn um Httptechniken geht immer nachfragen (Polling)
 
Zuletzt bearbeitet:
#4
Die Maschine müsste also wenn um Httptechniken geht immer nachfragen (Polling)
Also, so wie ich das verstanden habe, hat die Maschine mit HTTP gar nichts zu tun ...
Und langfristige Verbindungen gehen schon
 
#5
Vielen Dank für eure schnelle & ausführliche Antwort.

[...]
Das Ziel ist also ein alleinstehendes Java-Programm, um Requests von einer Webseite in UDP-Daten zu übersetzen (die Idee mit dem Browserplugin ist möglich, aber wenn man noch nie eins geschrieben hat wird das viel mehr Aufwand).
[...]
Ich bin zurzeit Praktikant und genau so wurde mir von meinem Chef die Aufgabe erklärt. Ein eigenständiges Java-Programm, welches auf Anfragen von einer Website reagiert.
Leider war er mit dem Thema nicht ganz vertraut und ich habe mit meinem Arbeitskollegen, der die UDP-Seite geschrieben hat, nochmals ausführlich gesprochen und letztendlich haben wir festgestellt, es reicht vollkommen, wenn ich seine Source als Libary einbinde & eine Instanz 'Motor' erzeuge, die mir bereits viele hilfreiche Methoden bereitstellt. (
Seine Source als eigenständies Programm laufen zu lassen ist nicht nötig.

Ich hatte mich bereits zwei Tage mit der Frage beschäftigt, wollte aber nun endlich weiterkommen, dass die Lösung dann plötzlich so einfach wäre, wusste ich nicht.