# Architekturfrage



## KIllrogg (28. Jul 2016)

As Is: 
Ich bin lediglich ein (evtl. ambitionierter) Hobbyprogrammierer - man möge mir meine partielle Unwissenheit also bitte verzeihen  

Ich habe bisher ein wenig mit RMI gearbeitet und auch mit JSON. 
Nun wollte ich von einer Android App aus auf einem Linuxrechner einen Server ansteuern (Sensordaten abfragen und Steuerdaten für Motoren hinschicken) leider habe ich von der Portierung meines Codes (Windows zu Linux via RMI) bemerkt dass auf Android RMI nicht unterstützt wird (grmmml eigentlich hatte ich extra JAVA gewählt, damit mein Code auf "allen Plattformen" laufen kann... denkste...) 

To Be: 
Nun meine Frage: was wäre denn nun eine vernünftige Alternative anstatt RMI um ein roboterähnliches Gerät (gestuert von einem Linuxrechner) in Echtzeit (Latenzen wären eher... schlecht) anzusteuern (also quasi eine bidirektionale Client-Server Verbindung - k.a. wie sich das im Fachjargon nennt)?  Eure Empfehlung werde ich mir dann wohl mal näher anschauen und beibringen. 


Hinweise, gerne auch mit den damit verbundenen Vor- und Nachteilen, werden erbeten!


----------



## Tobse (28. Jul 2016)

Je nachdem wie viel Kontrolle die Fernsteuerung haben muss könnte REST reichen. Wenn in Echtzeit eingaben durchgereicht werden müssen, musst du wohl oder übel ein eigenes Netzwerkprotokoll nehmen müssen. Dazu muss man auch sagen: Latenzen können IMMER auftreten. Vor allem aus dem Mobilfunknetz, etc. Der Server MUSS also auch damit umgehen können, wenn die Verbindung mal stockt oder sogar ganz abreisst.


----------



## KIllrogg (28. Jul 2016)

Tobse hat gesagt.:


> Je nachdem wie viel Kontrolle die Fernsteuerung haben muss könnte REST reichen.


REST kenne ich nicht,  schau mir das mal an. 

@Latenzen 
Ich gehe eh vom Anwendungsfall wlan (mit kurzen Abständen)  aus. Vergleichbar mit Fy by wire (nur eben ohne wire). 
Übers internet wäre dann eher so was wie der mars Rover (dauert halt bis response kommt) 

Ideal wäre ein Standard der Beides kann,  aber erstes ist (viel)  wichtiger.


----------



## dayaftereh (29. Jul 2016)

Hey. Ich weiß nicht was du genau vor hast. Wenn du Plattform unabhängig bleiben willst würde ich ins Web gehen. 

Das heißt, ich würde einen Webserver entwickeln der eine Rest API hat über die du deine Sensordaten abfragen kannst. Zudem hat der Webserver eine Singel-Page Webapplikationen zB AngularJS, die die Sensordaten vom Server holt und dann an die Webseite schick bzw anzeigt.

Wenn du Daten in Echtzeit haben willst kannst du websocket benutzen. Ist wie ein TCP Socket, nur mit einem kleinen Protokoll.

Damit sparst du dir die App Entwicklung und kannst die Webseite auch über einen Desktop Rechner oder iOS benutzen.


----------



## KIllrogg (29. Jul 2016)

Ok... 
REST ist zwar interessant,  aber websocket erscheint mir genau die Features zu liefern die ich will. (für andere noobs hier ein link der schnell zusammenfasst was websocket so kann: 
http://www.html5rocks.com/de/tutorials/websockets/basics/) 

Ist aber leider anscheinend ein größerer Brocken zu kennen lernen (jetty usw.. ) 

Danke Leute für euren Support!


----------



## Andy17 (29. Jul 2016)

Ich würde in deinem Anwendungsfall auch einen Applicationserver aufsetzen, welcher REST-Schnittstellen anbietet. Da du eine Android-App nutzen möchtest, klingt der Anwendungsfall, dass Du auch mal aus dem WAN kommst, recht realistisch.

Du solltest noch an Security-Aspekte denken. Nutze vielleicht HTTPS und shared-Secrets um deine Anwendung und deine App zu authentifizieren. Wenn ich an Motorensteuerung denke, dann wäre Sicherheit ja vielleicht auch ein Aspekt, den du berücksichtigen solltest.


----------

